-\r
+\r
#ifndef HeavyOSECPU_jitc_h\r
#define HeavyOSECPU_jitc_h\r
\r
//\r
#define IA32_OP_RM32_MOD00_ADDR_DISP32 5\r
//\r
-#define envOffset_DBGINFO0 (2304 + 0)\r
-#define envOffset_DBGINFO1 (2304 + 4)\r
-#define envOffset_PTRCTRL (2320)\r
-#define PRegOffset(regid) (256 + 32 * regid)\r
+#define envOffset_DBGINFO0 (2304 + 0)\r
+#define envOffset_DBGINFO1 (2304 + 4)\r
+#define envOffset_DBGCURRENTCODE (2304 + 8)\r
+#define envOffset_DBGCURRENTCODEADDR (2304 + 12)\r
+#define envOffset_PTRCTRL (2320)\r
+#define PRegOffset(regid) (256 + 32 * regid)\r
//\r
#define jitCompPutImm32(p, i) jitCompPutByte4(p, ((i) & 0xff), (((i) >> 8) & 0xff), (((i) >> 16) & 0xff), (((i) >> 24) & 0xff))\r
//\r
#define jitCompPutOp_CALL_Relative(p, diff) jitCompPutByte1(p, 0xe8); jitCompPutImm32(p, diff); /*次の命令との相対オフセットだけ相対コールする*/\r
#define jitCompPutOp_JMPnear(p, diff) jitCompPutByte1(p, 0xe9); jitCompPutImm32(p, diff); /*次の命令との相対オフセットだけ相対ジャンプする*/\r
#define jitCompPutOp_JMPshort(p, diff) jitCompPutByte2(p, 0xeb, diff & 0xff);/*次の命令との相対オフセットだけ相対ジャンプする*/\r
+#define jitCompPutOp_INT3(p) jitCompPutByte1(p, 0xCC);\r
//\r
#define jitCompPutOp_MOV_EAX_ZERO(p) jitCompPutOp_XOR_GReg_GReg(p, IA32_REG0_EAX, IA32_REG0_EAX);\r
-\r
+//\r
+#define DEBUGCode(work, code) jitCompPutOp_MOV_GReg_Imm32((work)->dst, IA32_REG0_EAX, code); jitCompPutOp_MOV_EBPDisp_GReg(work, envOffset_DBGCURRENTCODE, IA32_REG0_EAX);\r
+#define DEBUGCodeAddress(work, addr) jitCompPutOp_MOV_GReg_Imm32((work)->dst, IA32_REG0_EAX, addr); jitCompPutOp_MOV_EBPDisp_GReg(work, envOffset_DBGCURRENTCODEADDR, IA32_REG0_EAX);\r
// Optimization settings\r
// 他のCPUへ移植する人へ:\r
// 以下の定数は最適化のためのものなので、すべて0として簡単に移植しても問題ありません\r