diff --git a/lightening.h b/lightening.h index d9e8e1f79..7fd96f2ae 100644 --- a/lightening.h +++ b/lightening.h @@ -600,6 +600,8 @@ jit_load_args_3(jit_state_t *_jit, jit_operand_t a, jit_operand_t b, M(_F___, retval_f) \ M(_F___, retval_d) \ \ + M(_____, breakpoint) \ + \ M(_FF__, negr_f) \ M(_FF__, negr_d) \ M(_FF__, absr_f) \ diff --git a/lightening/aarch64-cpu.c b/lightening/aarch64-cpu.c index 39ca06a34..e99c69633 100644 --- a/lightening/aarch64-cpu.c +++ b/lightening/aarch64-cpu.c @@ -273,6 +273,7 @@ oxxrs(jit_state_t *_jit, int32_t Op, #define A64_MOVN 0x12800000 #define A64_MOVZ 0x52800000 #define A64_MOVK 0x72800000 +#define A64_BRK 0xd4200000 static void SBFM(jit_state_t *_jit, int32_t Rd, int32_t Rn, int32_t ImmR, int32_t ImmS) @@ -926,6 +927,12 @@ NOP(jit_state_t *_jit) return emit_u32_with_pool(_jit, 0xd503201f); } +static void +BRK(jit_state_t *_jit) +{ + emit_u32_with_pool(_jit, A64_BRK); +} + static jit_reloc_t movi_from_pool(jit_state_t *_jit, int32_t Rt) { @@ -2540,3 +2547,9 @@ cas_atomic(jit_state_t *_jit, int32_t dst, int32_t loc, int32_t expected, movr(_jit, dst, dst_or_tmp); unget_temp_gpr(_jit); } + +static void +breakpoint(jit_state_t *_jit) +{ + BRK(_jit); +} diff --git a/lightening/arm-cpu.c b/lightening/arm-cpu.c index b4e1660b9..a280ca192 100644 --- a/lightening/arm-cpu.c +++ b/lightening/arm-cpu.c @@ -182,6 +182,7 @@ #define THUMB_DMB 0xf3bf8f50 #define THUMB_LDREX 0xe8500f00 #define THUMB_STREX 0xe8400000 +#define THUMB_BRK 0xbe00 #define _NOREG (jit_gpr_regno(_PC)) @@ -1341,6 +1342,12 @@ T2_STRIN(jit_state_t *_jit, int32_t rt, int32_t rn, int32_t im) return torri8(_jit, THUMB2_STRI,rn,rt,im); } +static void +T1_BRK(jit_state_t *_jit) +{ + emit_u16_with_pool(_jit, THUMB_BRK); +} + static void nop(jit_state_t *_jit, int32_t i0) { @@ -3053,3 +3060,9 @@ cas_atomic(jit_state_t *_jit, int32_t dst, int32_t loc, int32_t expected, movr(_jit, dst, dst_or_tmp); unget_temp_gpr(_jit); } + +static void +breakpoint(jit_state_t *_jit) +{ + T1_BRK(_jit); +} diff --git a/lightening/x86-cpu.c b/lightening/x86-cpu.c index 28ec73886..aa2bbdd78 100644 --- a/lightening/x86-cpu.c +++ b/lightening/x86-cpu.c @@ -2753,3 +2753,9 @@ cas_atomic(jit_state_t *_jit, int32_t dst, int32_t loc, int32_t expected, unget_temp_gpr(_jit); } } + +static void +breakpoint(jit_state_t *_jit) +{ + ic(_jit, 0xcc); +}