X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=jitc.h;h=bf136aee1a28707ea309b84b9c2581669d2053d0;hb=152bd3574280c5c7754983964bfd2eabc8fe0205;hp=4a9903889daf86f1718b790eca93e531c5c2e4c2;hpb=7b5432ba36a3c6685b97e59b3242369016ce246d;p=heavyosecpu%2FHeavyOSECPU.git diff --git a/jitc.h b/jitc.h index 4a99038..bf136ae 100644 --- a/jitc.h +++ b/jitc.h @@ -1,4 +1,4 @@ - + #ifndef HeavyOSECPU_jitc_h #define HeavyOSECPU_jitc_h @@ -59,10 +59,12 @@ int jitCompCmdLen(const unsigned char *src); // #define IA32_OP_RM32_MOD00_ADDR_DISP32 5 // -#define envOffset_DBGINFO0 (2304 + 0) -#define envOffset_DBGINFO1 (2304 + 4) -#define envOffset_PTRCTRL (2320) -#define PRegOffset(regid) (256 + 32 * regid) +#define envOffset_DBGINFO0 (2304 + 0) +#define envOffset_DBGINFO1 (2304 + 4) +#define envOffset_DBGCURRENTCODE (2304 + 8) +#define envOffset_DBGCURRENTCODEADDR (2304 + 12) +#define envOffset_PTRCTRL (2320) +#define PRegOffset(regid) (256 + 32 * regid) // #define jitCompPutImm32(p, i) jitCompPutByte4(p, ((i) & 0xff), (((i) >> 8) & 0xff), (((i) >> 16) & 0xff), (((i) >> 24) & 0xff)) // @@ -77,9 +79,12 @@ int jitCompCmdLen(const unsigned char *src); #define jitCompPutOp_CALL_Relative(p, diff) jitCompPutByte1(p, 0xe8); jitCompPutImm32(p, diff); /*次の命令との相対オフセットだけ相対コールする*/ #define jitCompPutOp_JMPnear(p, diff) jitCompPutByte1(p, 0xe9); jitCompPutImm32(p, diff); /*次の命令との相対オフセットだけ相対ジャンプする*/ #define jitCompPutOp_JMPshort(p, diff) jitCompPutByte2(p, 0xeb, diff & 0xff);/*次の命令との相対オフセットだけ相対ジャンプする*/ +#define jitCompPutOp_INT3(p) jitCompPutByte1(p, 0xCC); // #define jitCompPutOp_MOV_EAX_ZERO(p) jitCompPutOp_XOR_GReg_GReg(p, IA32_REG0_EAX, IA32_REG0_EAX); - +// +#define DEBUGCode(work, code) jitCompPutOp_MOV_GReg_Imm32((work)->dst, IA32_REG0_EAX, code); jitCompPutOp_MOV_EBPDisp_GReg(work, envOffset_DBGCURRENTCODE, IA32_REG0_EAX); +#define DEBUGCodeAddress(work, addr) jitCompPutOp_MOV_GReg_Imm32((work)->dst, IA32_REG0_EAX, addr); jitCompPutOp_MOV_EBPDisp_GReg(work, envOffset_DBGCURRENTCODEADDR, IA32_REG0_EAX); // Optimization settings // 他のCPUへ移植する人へ: // 以下の定数は最適化のためのものなので、すべて0として簡単に移植しても問題ありません