diff options
author | mengqinggang <mengqinggang@loongson.cn> | 2023-09-24 14:53:28 +0800 |
---|---|---|
committer | liuzhensong <liuzhensong@loongson.cn> | 2023-10-10 16:34:33 +0800 |
commit | 1fb3cdd87ec61715a5684925fb6d6a6cf53bb97c (patch) | |
tree | 29ff87c34597a975906f77e6bfaeedf8e433c37e /include/opcode | |
parent | 9847ba8f085a7da0d85e90718ca987ab76637cbe (diff) | |
download | gdb-1fb3cdd87ec61715a5684925fb6d6a6cf53bb97c.zip gdb-1fb3cdd87ec61715a5684925fb6d6a6cf53bb97c.tar.gz gdb-1fb3cdd87ec61715a5684925fb6d6a6cf53bb97c.tar.bz2 |
LoongArch/GAS: Add support for branch relaxation
For the instructions of R_LARCH_B16/B21, if the immediate overflow,
add a B instruction and R_LARCH_B26 relocation.
For example:
.L1
...
blt $t0, $t1, .L1
R_LARCH_B16
change to:
.L1
...
bge $t0, $t1, .L2
b .L1
R_LARCH_B26
.L2
Diffstat (limited to 'include/opcode')
-rw-r--r-- | include/opcode/loongarch.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/include/opcode/loongarch.h b/include/opcode/loongarch.h index 2ed4082..f358ff4 100644 --- a/include/opcode/loongarch.h +++ b/include/opcode/loongarch.h @@ -29,6 +29,18 @@ extern "C" #endif #define LARCH_NOP 0x03400000 + #define LARCH_B 0x50000000 + /* BCEQZ/BCNEZ. */ + #define LARCH_FLOAT_BRANCH 0x48000000 + #define LARCH_BRANCH_OPCODE_MASK 0xfc000000 + #define LARCH_BRANCH_INVERT_BIT 0x04000000 + #define LARCH_FLOAT_BRANCH_INVERT_BIT 0x00000100 + + #define ENCODE_BRANCH16_IMM(x) (((x) >> 2) << 10) + + #define OUT_OF_RANGE(value, bits, align) \ + ((value) < (-(1 << ((bits) - 1) << align)) \ + || (value) > ((((1 << ((bits) - 1)) - 1) << align))) typedef uint32_t insn_t; |