author | pcpa <paulo.cesar.pereira.de.andrade@gmail.com> | 2024年02月02日 11:58:24 -0300 |
---|---|---|
committer | pcpa <paulo.cesar.pereira.de.andrade@gmail.com> | 2024年02月02日 11:58:24 -0300 |
commit | 79634e02a42984381314628a2d7a4e6efe4e589c (patch) | |
tree | e2791e457fa8086a53c9422fde9ca508a42950f2 /lib/jit_arm-cpu.c | |
parent | a03782b2df5835e1735472c8a142baa6cb32ef02 (diff) | |
download | lightning-79634e02a42984381314628a2d7a4e6efe4e589c.tar.gz |
-rw-r--r-- | lib/jit_arm-cpu.c | 50 |
diff --git a/lib/jit_arm-cpu.c b/lib/jit_arm-cpu.c index 149db9a..813b01e 100644 --- a/lib/jit_arm-cpu.c +++ b/lib/jit_arm-cpu.c @@ -269,7 +269,7 @@ extern unsigned __aeabi_uidivmod(unsigned, unsigned); # define ARM_BLI 0x0b000000 # define THUMB2_BLI 0xf000d000 /* ldr/str */ -# define ARM_P 0x00800000 /* positive offset */ +# define ARM_U 0x00800000 /* positive offset */ # define THUMB2_P 0x00000400 # define THUMB2_U 0x00000200 # define THUMB2_W 0x00000100 @@ -717,26 +717,26 @@ static void _corrlw(jit_state_t*,int,int,int,int,int,int); # define CC_BLI(cc,im) cb(cc,ARM_BLI,im) # define BLI(im) CC_BLI(ARM_CC_AL,im) # define T2_BLI(im) tb(THUMB2_BLI,im) -# define CC_LDRSB(cc,rt,rn,rm) corrr(cc,ARM_LDRSB|ARM_P,rn,rt,rm) +# define CC_LDRSB(cc,rt,rn,rm) corrr(cc,ARM_LDRSB|ARM_U,rn,rt,rm) # define LDRSB(rt,rn,rm) CC_LDRSB(ARM_CC_AL,rt,rn,rm) # define T1_LDRSB(rt,rn,rm) is(THUMB_LDRSB|(_u3(rm)<<6)|(_u3(rn)<<3)|_u3(rt)) # define T2_LDRSB(rt,rn,rm) torxr(THUMB2_LDRSB,rn,rt,rm) # define CC_LDRSBN(cc,rt,rn,rm) corrr(cc,ARM_LDRSB,rn,rt,rm) # define LDRSBN(rt,rn,rm) CC_LDRSBN(ARM_CC_AL,rt,rn,rm) -# define CC_LDRSBI(cc,rt,rn,im) corri8(cc,ARM_LDRSBI|ARM_P,rn,rt,im) +# define CC_LDRSBI(cc,rt,rn,im) corri8(cc,ARM_LDRSBI|ARM_U,rn,rt,im) # define LDRSBI(rt,rn,im) CC_LDRSBI(ARM_CC_AL,rt,rn,im) # define T2_LDRSBI(rt,rn,im) torri8(THUMB2_LDRSBI|THUMB2_U,rn,rt,im) # define T2_LDRSBWI(rt,rn,im) torri12(THUMB2_LDRSBWI,rn,rt,im) # define CC_LDRSBIN(cc,rt,rn,im) corri8(cc,ARM_LDRSBI,rn,rt,im) # define LDRSBIN(rt,rn,im) CC_LDRSBIN(ARM_CC_AL,rt,rn,im) # define T2_LDRSBIN(rt,rn,im) torri8(THUMB2_LDRSBI,rn,rt,im) -# define CC_LDRB(cc,rt,rn,rm) corrr(cc,ARM_LDRB|ARM_P,rn,rt,rm) +# define CC_LDRB(cc,rt,rn,rm) corrr(cc,ARM_LDRB|ARM_U,rn,rt,rm) # define LDRB(rt,rn,rm) CC_LDRB(ARM_CC_AL,rt,rn,rm) # define T1_LDRB(rt,rn,rm) is(THUMB_LDRB|(_u3(rm)<<6)|(_u3(rn)<<3)|_u3(rt)) # define T2_LDRB(rt,rn,rm) torxr(THUMB2_LDRB,rn,rt,rm) # define CC_LDRBN(cc,rt,rn,rm) corrr(cc,ARM_LDRB,rn,rt,rm) # define LDRBN(rt,rn,rm) CC_LDRBN(ARM_CC_AL,rt,rn,rm) -# define CC_LDRBI(cc,rt,rn,im) corri(cc,ARM_LDRBI|ARM_P,rn,rt,im) +# define CC_LDRBI(cc,rt,rn,im) corri(cc,ARM_LDRBI|ARM_U,rn,rt,im) # define LDRBI(rt,rn,im) CC_LDRBI(ARM_CC_AL,rt,rn,im) # define T1_LDRBI(rt,rn,im) is(THUMB_LDRBI|(_u5(im)<<6)|(_u3(rn)<<3)|_u3(rt)) # define T2_LDRBI(rt,rn,im) torri8(THUMB2_LDRBI|THUMB2_U,rn,rt,im) @@ -744,26 +744,26 @@ static void _corrlw(jit_state_t*,int,int,int,int,int,int); # define CC_LDRBIN(cc,rt,rn,im) corri(cc,ARM_LDRBI,rn,rt,im) # define LDRBIN(rt,rn,im) CC_LDRBIN(ARM_CC_AL,rt,rn,im) # define T2_LDRBIN(rt,rn,im) torri8(THUMB2_LDRBI,rn,rt,im) -# define CC_LDRSH(cc,rt,rn,rm) corrr(cc,ARM_LDRSH|ARM_P,rn,rt,rm) +# define CC_LDRSH(cc,rt,rn,rm) corrr(cc,ARM_LDRSH|ARM_U,rn,rt,rm) # define LDRSH(rt,rn,rm) CC_LDRSH(ARM_CC_AL,rt,rn,rm) # define T1_LDRSH(rt,rn,rm) is(THUMB_LDRSH|(_u3(rm)<<6)|(_u3(rn)<<3)|_u3(rt)) # define T2_LDRSH(rt,rn,rm) torxr(THUMB2_LDRSH,rn,rt,rm) # define CC_LDRSHN(cc,rt,rn,rm) corrr(cc,ARM_LDRSH,rn,rt,rm) # define LDRSHN(rt,rn,rm) CC_LDRSHN(ARM_CC_AL,rt,rn,rm) -# define CC_LDRSHI(cc,rt,rn,im) corri8(cc,ARM_LDRSHI|ARM_P,rn,rt,im) +# define CC_LDRSHI(cc,rt,rn,im) corri8(cc,ARM_LDRSHI|ARM_U,rn,rt,im) # define LDRSHI(rt,rn,im) CC_LDRSHI(ARM_CC_AL,rt,rn,im) # define T2_LDRSHI(rt,rn,im) torri8(THUMB2_LDRSHI|THUMB2_U,rn,rt,im) # define T2_LDRSHWI(rt,rn,im) torri12(THUMB2_LDRSHWI,rn,rt,im) # define CC_LDRSHIN(cc,rt,rn,im) corri8(cc,ARM_LDRSHI,rn,rt,im) # define LDRSHIN(rt,rn,im) CC_LDRSHIN(ARM_CC_AL,rt,rn,im) # define T2_LDRSHIN(rt,rn,im) torri8(THUMB2_LDRSHI,rn,rt,im) -# define CC_LDRH(cc,rt,rn,rm) corrr(cc,ARM_LDRH|ARM_P,rn,rt,rm) +# define CC_LDRH(cc,rt,rn,rm) corrr(cc,ARM_LDRH|ARM_U,rn,rt,rm) # define LDRH(rt,rn,rm) CC_LDRH(ARM_CC_AL,rt,rn,rm) # define T1_LDRH(rt,rn,rm) is(THUMB_LDRH|(_u3(rm)<<6)|(_u3(rn)<<3)|_u3(rt)) # define T2_LDRH(rt,rn,rm) torxr(THUMB2_LDRH,rn,rt,rm) # define CC_LDRHN(cc,rt,rn,rm) corrr(cc,ARM_LDRH,rn,rt,rm) # define LDRHN(rt,rn,rm) CC_LDRHN(ARM_CC_AL,rt,rn,rm) -# define CC_LDRHI(cc,rt,rn,im) corri8(cc,ARM_LDRHI|ARM_P,rn,rt,im) +# define CC_LDRHI(cc,rt,rn,im) corri8(cc,ARM_LDRHI|ARM_U,rn,rt,im) # define LDRHI(rt,rn,im) CC_LDRHI(ARM_CC_AL,rt,rn,im) # define T1_LDRHI(rt,rn,im) is(THUMB_LDRHI|(_u5(im)<<6)|(_u3(rn)<<3)|_u3(rt)) # define T2_LDRHI(rt,rn,im) torri8(THUMB2_LDRHI|THUMB2_U,rn,rt,im) @@ -771,13 +771,13 @@ static void _corrlw(jit_state_t*,int,int,int,int,int,int); # define CC_LDRHIN(cc,rt,rn,im) corri8(cc,ARM_LDRHI,rn,rt,im) # define LDRHIN(rt,rn,im) CC_LDRHIN(ARM_CC_AL,rt,rn,im) # define T2_LDRHIN(rt,rn,im) torri8(THUMB2_LDRHI,rn,rt,im) -# define CC_LDR(cc,rt,rn,rm) corrr(cc,ARM_LDR|ARM_P,rn,rt,rm) +# define CC_LDR(cc,rt,rn,rm) corrr(cc,ARM_LDR|ARM_U,rn,rt,rm) # define LDR(rt,rn,rm) CC_LDR(ARM_CC_AL,rt,rn,rm) # define T1_LDR(rt,rn,rm) is(THUMB_LDR|(_u3(rm)<<6)|(_u3(rn)<<3)|_u3(rt)) # define T2_LDR(rt,rn,rm) torxr(THUMB2_LDR,rn,rt,rm) # define CC_LDRN(cc,rt,rn,rm) corrr(cc,ARM_LDR,rn,rt,rm) # define LDRN(rt,rn,rm) CC_LDRN(ARM_CC_AL,rt,rn,rm) -# define CC_LDRI(cc,rt,rn,im) corri(cc,ARM_LDRI|ARM_P,rn,rt,im) +# define CC_LDRI(cc,rt,rn,im) corri(cc,ARM_LDRI|ARM_U,rn,rt,im) # define LDRI(rt,rn,im) CC_LDRI(ARM_CC_AL,rt,rn,im) # define T1_LDRI(rt,rn,im) is(THUMB_LDRI|(_u5(im)<<6)|(_u3(rn)<<3)|_u3(rt)) # define T1_LDRISP(rt,im) is(THUMB_LDRISP|(_u3(rt)<<8)|_u8(im)) @@ -786,12 +786,12 @@ static void _corrlw(jit_state_t*,int,int,int,int,int,int); # define CC_LDRIN(cc,rt,rn,im) corri(cc,ARM_LDRI,rn,rt,im) # define LDRIN(rt,rn,im) CC_LDRIN(ARM_CC_AL,rt,rn,im) # define T2_LDRIN(rt,rn,im) torri8(THUMB2_LDRI,rn,rt,im) -# define CC_LDRD(cc,rt,rn,rm) corrr(cc,ARM_LDRD|ARM_P,rn,rt,rm) +# define CC_LDRD(cc,rt,rn,rm) corrr(cc,ARM_LDRD|ARM_U,rn,rt,rm) # define LDRD(rt,rn,rm) CC_LDRD(ARM_CC_AL,rt,rn,rm) -# define T2_LDRDI(rt,rt2,rn,im) torrri8(THUMB2_LDRDI|ARM_P,rn,rt,rt2,im) +# define T2_LDRDI(rt,rt2,rn,im) torrri8(THUMB2_LDRDI|ARM_U,rn,rt,rt2,im) # define CC_LDRDN(cc,rt,rn,rm) corrr(cc,ARM_LDRD,rn,rt,rm) # define LDRDN(rd,rn,rm) CC_LDRDN(ARM_CC_AL,rt,rn,rm) -# define CC_LDRDI(cc,rt,rn,im) corri8(cc,ARM_LDRDI|ARM_P,rn,rt,im) +# define CC_LDRDI(cc,rt,rn,im) corri8(cc,ARM_LDRDI|ARM_U,rn,rt,im) # define LDRDI(rt,rn,im) CC_LDRDI(ARM_CC_AL,rt,rn,im) # define CC_LDRDIN(cc,rt,rn,im) corri8(cc,ARM_LDRDI,rn,rt,im) # define LDRDIN(rt,rn,im) CC_LDRDIN(ARM_CC_AL,rt,rn,im) @@ -799,13 +799,13 @@ static void _corrlw(jit_state_t*,int,int,int,int,int,int); # define CC_LDREX(cc,rt,rn) corrrr(cc,ARM_LDREX,rn,rt,0xf,0xf) # define LDREX(rt,rn) CC_LDREX(ARM_CC_AL,rt,rn) # define T2_LDREX(rt,rn,im) torrri8(THUMB2_LDREX,rn,rt,0xf,im) -# define CC_STRB(cc,rt,rn,rm) corrr(cc,ARM_STRB|ARM_P,rn,rt,rm) +# define CC_STRB(cc,rt,rn,rm) corrr(cc,ARM_STRB|ARM_U,rn,rt,rm) # define STRB(rt,rn,rm) CC_STRB(ARM_CC_AL,rt,rn,rm) # define T1_STRB(rt,rn,rm) is(THUMB_STRB|(_u3(rm)<<6)|(_u3(rn)<<3)|_u3(rt)) # define T2_STRB(rt,rn,rm) torxr(THUMB2_STRB,rn,rt,rm) # define CC_STRBN(cc,rt,rn,rm) corrr(cc,ARM_STRB,rn,rt,rm) # define STRBN(rt,rn,rm) CC_STRBN(ARM_CC_AL,rt,rn,rm) -# define CC_STRBI(cc,rt,rn,im) corri(cc,ARM_STRBI|ARM_P,rn,rt,im) +# define CC_STRBI(cc,rt,rn,im) corri(cc,ARM_STRBI|ARM_U,rn,rt,im) # define STRBI(rt,rn,im) CC_STRBI(ARM_CC_AL,rt,rn,im) # define T1_STRBI(rt,rn,im) is(THUMB_STRBI|(_u5(im)<<6)|(_u3(rn)<<3)|_u3(rt)) # define T2_STRBI(rt,rn,im) torri8(THUMB2_STRBI|THUMB2_U,rn,rt,im) @@ -813,13 +813,13 @@ static void _corrlw(jit_state_t*,int,int,int,int,int,int); # define CC_STRBIN(cc,rt,rn,im) corri(cc,ARM_STRBI,rn,rt,im) # define STRBIN(rt,rn,im) CC_STRBIN(ARM_CC_AL,rt,rn,im) # define T2_STRBIN(rt,rn,im) torri8(THUMB2_STRBI,rn,rt,im) -# define CC_STRH(cc,rt,rn,rm) corrr(cc,ARM_STRH|ARM_P,rn,rt,rm) +# define CC_STRH(cc,rt,rn,rm) corrr(cc,ARM_STRH|ARM_U,rn,rt,rm) # define STRH(rt,rn,rm) CC_STRH(ARM_CC_AL,rt,rn,rm) # define T1_STRH(rt,rn,rm) is(THUMB_STRH|(_u3(rm)<<6)|(_u3(rn)<<3)|_u3(rt)) # define T2_STRH(rt,rn,rm) torxr(THUMB2_STRH,rn,rt,rm) # define CC_STRHN(cc,rt,rn,rm) corrr(cc,ARM_STRH,rn,rt,rm) # define STRHN(rt,rn,rm) CC_STRHN(ARM_CC_AL,rt,rn,rm) -# define CC_STRHI(cc,rt,rn,im) corri8(cc,ARM_STRHI|ARM_P,rn,rt,im) +# define CC_STRHI(cc,rt,rn,im) corri8(cc,ARM_STRHI|ARM_U,rn,rt,im) # define STRHI(rt,rn,im) CC_STRHI(ARM_CC_AL,rt,rn,im) # define T1_STRHI(rt,rn,im) is(THUMB_STRHI|(_u5(im)<<6)|(_u3(rn)<<3)|_u3(rt)) # define T2_STRHI(rt,rn,im) torri8(THUMB2_STRHI|THUMB2_U,rn,rt,im) @@ -827,13 +827,13 @@ static void _corrlw(jit_state_t*,int,int,int,int,int,int); # define CC_STRHIN(cc,rt,rn,im) corri8(cc,ARM_STRHI,rn,rt,im) # define STRHIN(rt,rn,im) CC_STRHIN(ARM_CC_AL,rt,rn,im) # define T2_STRHIN(rt,rn,im) torri8(THUMB2_STRHI,rn,rt,im) -# define CC_STR(cc,rt,rn,rm) corrr(cc,ARM_STR|ARM_P,rn,rt,rm) +# define CC_STR(cc,rt,rn,rm) corrr(cc,ARM_STR|ARM_U,rn,rt,rm) # define STR(rt,rn,rm) CC_STR(ARM_CC_AL,rt,rn,rm) # define T1_STR(rt,rn,rm) is(THUMB_STR|(_u3(rm)<<6)|(_u3(rn)<<3)|_u3(rt)) # define T2_STR(rt,rn,rm) torxr(THUMB2_STR,rn,rt,rm) # define CC_STRN(cc,rt,rn,rm) corrr(cc,ARM_STR,rn,rt,rm) # define STRN(rt,rn,rm) CC_STRN(ARM_CC_AL,rt,rn,rm) -# define CC_STRI(cc,rt,rn,im) corri(cc,ARM_STRI|ARM_P,rn,rt,im) +# define CC_STRI(cc,rt,rn,im) corri(cc,ARM_STRI|ARM_U,rn,rt,im) # define STRI(rt,rn,im) CC_STRI(ARM_CC_AL,rt,rn,im) # define T1_STRI(rt,rn,im) is(THUMB_STRI|(_u5(im)<<6)|(_u3(rn)<<3)|_u3(rt)) # define T1_STRISP(rt,im) is(THUMB_STRISP|(_u3(rt)<<8)|(_u8(im))) @@ -842,13 +842,13 @@ static void _corrlw(jit_state_t*,int,int,int,int,int,int); # define CC_STRIN(cc,rt,rn,im) corri(cc,ARM_STRI,rn,rt,im) # define STRIN(rt,rn,im) CC_STRIN(ARM_CC_AL,rt,rn,im) # define T2_STRIN(rt,rn,im) torri8(THUMB2_STRI,rn,rt,im) -# define CC_STRD(cc,rt,rn,rm) corrr(cc,ARM_STRD|ARM_P,rn,rt,rm) +# define CC_STRD(cc,rt,rn,rm) corrr(cc,ARM_STRD|ARM_U,rn,rt,rm) # define STRD(rt,rn,rm) CC_STRD(ARM_CC_AL,rt,rn,rm) # define CC_STRDN(cc,rt,rn,rm) corrr(cc,ARM_STRD,rn,rt,rm) # define STRDN(rt,rn,rm) CC_STRDN(ARM_CC_AL,rt,rn,rm) -# define CC_STRDI(cc,rt,rn,im) corri8(cc,ARM_STRDI|ARM_P,rn,rt,im) +# define CC_STRDI(cc,rt,rn,im) corri8(cc,ARM_STRDI|ARM_U,rn,rt,im) # define STRDI(rt,rn,im) CC_STRDI(ARM_CC_AL,rt,rn,im) -# define T2_STRDI(rt,rt2,rn,im) torrri8(THUMB2_STRDI|ARM_P,rn,rt,rt2,im) +# define T2_STRDI(rt,rt2,rn,im) torrri8(THUMB2_STRDI|ARM_U,rn,rt,rt2,im) # define CC_STRDIN(cc,rt,rn,im) corri8(cc,ARM_STRDI,rn,rt,im) # define STRDIN(rt,rn,im) CC_STRDIN(ARM_CC_AL,rt,rn,im) # define T2_STRDIN(rt,rt2,rn,im) torrri8(THUMB2_STRDI,rn,rt,rt2,im) @@ -4548,11 +4548,11 @@ _patch_at(jit_state_t *_jit, assert((thumb.i & 0x0f700000) == ARM_LDRI); d = label - (instr + 8); if (d < 0) { - thumb.i &= ~ARM_P; + thumb.i &= ~ARM_U; d = -d; } else - thumb.i |= ARM_P; + thumb.i |= ARM_U; assert(!(d & 0xfffff000)); u.i[0] = (thumb.i & 0xfffff000) | d; } |