Alien-LibJIT
view release on metacpan or search on metacpan
libjit/jit/jit-gen-x86.h view on Meta::CPAN
do { \
*(inst)++ = (unsigned char) 0x0f; \
if ((is_signed)) \
*(inst)++ = x86_cc_signed_map [(cond)] - 0x30; \
else \
*(inst)++ = x86_cc_unsigned_map [(cond)] - 0x30; \
x86_reg_emit ((inst), (dreg), (reg)); \
} while (0)
#define x86_cmov_mem(inst,cond,is_signed,reg,mem) \
do { \
*(inst)++ = (unsigned char) 0x0f; \
if ((is_signed)) \
*(inst)++ = x86_cc_signed_map [(cond)] - 0x30; \
else \
*(inst)++ = x86_cc_unsigned_map [(cond)] - 0x30; \
x86_mem_emit ((inst), (reg), (mem)); \
} while (0)
#define x86_cmov_membase(inst,cond,is_signed,reg,basereg,disp) \
do { \
*(inst)++ = (unsigned char) 0x0f; \
if ((is_signed)) \
*(inst)++ = x86_cc_signed_map [(cond)] - 0x30; \
else \
*(inst)++ = x86_cc_unsigned_map [(cond)] - 0x30; \
x86_membase_emit ((inst), (reg), (basereg), (disp)); \
} while (0)
#define x86_enter(inst,framesize) \
do { \
*(inst)++ = (unsigned char)0xc8; \
x86_imm_emit16 ((inst), (framesize)); \
*(inst)++ = 0; \
} while (0)
#define x86_leave(inst) do { *(inst)++ = (unsigned char)0xc9; } while (0)
#define x86_sahf(inst) do { *(inst)++ = (unsigned char)0x9e; } while (0)
#define x86_fsin(inst) do { *(inst)++ = (unsigned char)0xd9; *(inst)++ = (unsigned char)0xfe; } while (0)
#define x86_fcos(inst) do { *(inst)++ = (unsigned char)0xd9; *(inst)++ = (unsigned char)0xff; } while (0)
#define x86_fabs(inst) do { *(inst)++ = (unsigned char)0xd9; *(inst)++ = (unsigned char)0xe1; } while (0)
#define x86_ftst(inst) do { *(inst)++ = (unsigned char)0xd9; *(inst)++ = (unsigned char)0xe4; } while (0)
#define x86_fxam(inst) do { *(inst)++ = (unsigned char)0xd9; *(inst)++ = (unsigned char)0xe5; } while (0)
#define x86_fpatan(inst) do { *(inst)++ = (unsigned char)0xd9; *(inst)++ = (unsigned char)0xf3; } while (0)
#define x86_fprem(inst) do { *(inst)++ = (unsigned char)0xd9; *(inst)++ = (unsigned char)0xf8; } while (0)
#define x86_fprem1(inst) do { *(inst)++ = (unsigned char)0xd9; *(inst)++ = (unsigned char)0xf5; } while (0)
#define x86_frndint(inst) do { *(inst)++ = (unsigned char)0xd9; *(inst)++ = (unsigned char)0xfc; } while (0)
#define x86_fsqrt(inst) do { *(inst)++ = (unsigned char)0xd9; *(inst)++ = (unsigned char)0xfa; } while (0)
#define x86_fptan(inst) do { *(inst)++ = (unsigned char)0xd9; *(inst)++ = (unsigned char)0xf2; } while (0)
#define x86_padding(inst,size) \
do { \
switch ((size)) { \
case 1: x86_nop ((inst)); break; \
case 2: *(inst)++ = 0x8b; \
*(inst)++ = 0xc0; break; \
case 3: *(inst)++ = 0x8d; *(inst)++ = 0x6d; \
*(inst)++ = 0x00; break; \
case 4: *(inst)++ = 0x8d; *(inst)++ = 0x64; \
*(inst)++ = 0x24; *(inst)++ = 0x00; \
break; \
case 5: *(inst)++ = 0x8d; *(inst)++ = 0x64; \
*(inst)++ = 0x24; *(inst)++ = 0x00; \
x86_nop ((inst)); break; \
case 6: *(inst)++ = 0x8d; *(inst)++ = 0xad; \
*(inst)++ = 0x00; *(inst)++ = 0x00; \
*(inst)++ = 0x00; *(inst)++ = 0x00; \
break; \
case 7: *(inst)++ = 0x8d; *(inst)++ = 0xa4; \
*(inst)++ = 0x24; *(inst)++ = 0x00; \
*(inst)++ = 0x00; *(inst)++ = 0x00; \
*(inst)++ = 0x00; break; \
default: jit_assert (0); \
} \
} while (0)
#define x86_prolog(inst,frame_size,reg_mask) \
do { \
unsigned i, m = 1; \
x86_enter ((inst), (frame_size)); \
for (i = 0; i < X86_NREG; ++i, m <<= 1) { \
if ((reg_mask) & m) \
x86_push_reg ((inst), i); \
} \
} while (0)
#define x86_epilog(inst,reg_mask) \
do { \
unsigned i, m = 1 << X86_EDI; \
for (i = X86_EDI; m != 0; i--, m=m>>1) { \
if ((reg_mask) & m) \
x86_pop_reg ((inst), i); \
} \
x86_leave ((inst)); \
x86_ret ((inst)); \
} while (0)
#endif /* JIT_GEN_X86_H */
( run in 0.627 second using v1.01-cache-2.11-cpan-df04353d9ac )