summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/common/x64/emitter.h36
1 files changed, 17 insertions, 19 deletions
diff --git a/src/common/x64/emitter.h b/src/common/x64/emitter.h
index a1d8ab31f..865b724a8 100644
--- a/src/common/x64/emitter.h
+++ b/src/common/x64/emitter.h
@@ -236,43 +236,41 @@ private:
236 u16 operandReg = 0; 236 u16 operandReg = 0;
237}; 237};
238 238
239inline OpArg M(const void *ptr) {return OpArg((u64)ptr, (int)SCALE_RIP);}
240template <typename T> 239template <typename T>
241inline OpArg M(const T *ptr) {return OpArg((u64)(const void *)ptr, (int)SCALE_RIP);} 240inline OpArg M(const T *ptr) { return OpArg(reinterpret_cast<u64>(ptr), static_cast<int>(SCALE_RIP)); }
242inline OpArg R(X64Reg value) {return OpArg(0, SCALE_NONE, value);} 241constexpr OpArg R(X64Reg value) { return OpArg(0, SCALE_NONE, value); }
243inline OpArg MatR(X64Reg value) {return OpArg(0, SCALE_ATREG, value);} 242constexpr OpArg MatR(X64Reg value) { return OpArg(0, SCALE_ATREG, value); }
244 243
245inline OpArg MDisp(X64Reg value, int offset) 244constexpr OpArg MDisp(X64Reg value, int offset)
246{ 245{
247 return OpArg((u32)offset, SCALE_ATREG, value); 246 return OpArg(static_cast<u32>(offset), SCALE_ATREG, value);
248} 247}
249 248
250inline OpArg MComplex(X64Reg base, X64Reg scaled, int scale, int offset) 249constexpr OpArg MComplex(X64Reg base, X64Reg scaled, int scale, int offset)
251{ 250{
252 return OpArg(offset, scale, base, scaled); 251 return OpArg(offset, scale, base, scaled);
253} 252}
254 253
255inline OpArg MScaled(X64Reg scaled, int scale, int offset) 254constexpr OpArg MScaled(X64Reg scaled, int scale, int offset)
256{ 255{
257 if (scale == SCALE_1) 256 return scale == SCALE_1
258 return OpArg(offset, SCALE_ATREG, scaled); 257 ? OpArg(offset, SCALE_ATREG, scaled)
259 else 258 : OpArg(offset, scale | 0x20, RAX, scaled);
260 return OpArg(offset, scale | 0x20, RAX, scaled);
261} 259}
262 260
263inline OpArg MRegSum(X64Reg base, X64Reg offset) 261constexpr OpArg MRegSum(X64Reg base, X64Reg offset)
264{ 262{
265 return MComplex(base, offset, 1, 0); 263 return MComplex(base, offset, 1, 0);
266} 264}
267 265
268inline OpArg Imm8 (u8 imm) {return OpArg(imm, SCALE_IMM8);} 266constexpr OpArg Imm8 (u8 imm) { return OpArg(imm, SCALE_IMM8); }
269inline OpArg Imm16(u16 imm) {return OpArg(imm, SCALE_IMM16);} //rarely used 267constexpr OpArg Imm16(u16 imm) { return OpArg(imm, SCALE_IMM16); } //rarely used
270inline OpArg Imm32(u32 imm) {return OpArg(imm, SCALE_IMM32);} 268constexpr OpArg Imm32(u32 imm) { return OpArg(imm, SCALE_IMM32); }
271inline OpArg Imm64(u64 imm) {return OpArg(imm, SCALE_IMM64);} 269constexpr OpArg Imm64(u64 imm) { return OpArg(imm, SCALE_IMM64); }
272inline OpArg UImmAuto(u32 imm) { 270constexpr OpArg UImmAuto(u32 imm) {
273 return OpArg(imm, imm >= 128 ? SCALE_IMM32 : SCALE_IMM8); 271 return OpArg(imm, imm >= 128 ? SCALE_IMM32 : SCALE_IMM8);
274} 272}
275inline OpArg SImmAuto(s32 imm) { 273constexpr OpArg SImmAuto(s32 imm) {
276 return OpArg(imm, (imm >= 128 || imm < -128) ? SCALE_IMM32 : SCALE_IMM8); 274 return OpArg(imm, (imm >= 128 || imm < -128) ? SCALE_IMM32 : SCALE_IMM8);
277} 275}
278 276