447 lines
22 KiB
Diff
447 lines
22 KiB
Diff
From 91fcca79e66c426791c9055156644e96024e6599 Mon Sep 17 00:00:00 2001
|
|
From: mengqinggang <mengqinggang@loongson.cn>
|
|
Date: Mon, 18 Sep 2023 18:00:21 +0800
|
|
Subject: [PATCH 010/123] Add support for "pcaddi rd, symbol"
|
|
|
|
Add a macro pcaddi instruction to support "pcaddi rd, symbol".
|
|
|
|
pcaddi has a 20-bit signed immediate, it can address a +/- 2MB pc relative
|
|
address, and the address should be 4-byte aligned.
|
|
---
|
|
bfd/elfxx-loongarch.c | 4 +-
|
|
gas/testsuite/gas/loongarch/imm_ins.d | 137 ++++++++++++-----------
|
|
gas/testsuite/gas/loongarch/imm_ins_32.d | 91 +++++++--------
|
|
gas/testsuite/gas/loongarch/imm_op.d | 82 +++++++-------
|
|
gas/testsuite/gas/loongarch/imm_op.s | 2 +-
|
|
gas/testsuite/gas/loongarch/pcaddi.d | 13 +++
|
|
gas/testsuite/gas/loongarch/pcaddi.s | 4 +
|
|
opcodes/loongarch-opc.c | 2 +-
|
|
8 files changed, 177 insertions(+), 158 deletions(-)
|
|
create mode 100644 gas/testsuite/gas/loongarch/pcaddi.d
|
|
create mode 100644 gas/testsuite/gas/loongarch/pcaddi.s
|
|
|
|
diff --git a/bfd/elfxx-loongarch.c b/bfd/elfxx-loongarch.c
|
|
index 16a2b2fc..fd9507ce 100644
|
|
--- a/bfd/elfxx-loongarch.c
|
|
+++ b/bfd/elfxx-loongarch.c
|
|
@@ -1415,7 +1415,7 @@ static loongarch_reloc_howto_type loongarch_howto_table[] =
|
|
NULL, /* adjust_reloc_bits. */
|
|
NULL), /* larch_reloc_type_name. */
|
|
|
|
- /* pcala_hi20 + pcala_lo12 relaxed to pcrel20_s2. */
|
|
+ /* For pcaddi and pcala_hi20 + pcala_lo12 can relax to pcrel_20. */
|
|
LOONGARCH_HOWTO (R_LARCH_PCREL20_S2, /* type (103). */
|
|
2, /* rightshift. */
|
|
4, /* size. */
|
|
@@ -1431,7 +1431,7 @@ static loongarch_reloc_howto_type loongarch_howto_table[] =
|
|
false, /* pcrel_offset. */
|
|
BFD_RELOC_LARCH_PCREL20_S2, /* bfd_reloc_code_real_type. */
|
|
reloc_sign_bits, /* adjust_reloc_bits. */
|
|
- NULL), /* larch_reloc_type_name. */
|
|
+ "pcrel_20"), /* larch_reloc_type_name. */
|
|
|
|
/* Canonical Frame Address. */
|
|
LOONGARCH_HOWTO (R_LARCH_CFA, /* type (104). */
|
|
diff --git a/gas/testsuite/gas/loongarch/imm_ins.d b/gas/testsuite/gas/loongarch/imm_ins.d
|
|
index f00110cd..b54df873 100644
|
|
--- a/gas/testsuite/gas/loongarch/imm_ins.d
|
|
+++ b/gas/testsuite/gas/loongarch/imm_ins.d
|
|
@@ -7,74 +7,75 @@
|
|
|
|
Disassembly of section .text:
|
|
|
|
-00000000.* <.text>:
|
|
-[ ]+0:[ ]+03848c0c[ ]+li.w[ ]+\$t0,[ ]+0x123
|
|
-[ ]+4:[ ]+15ffe00d[ ]+lu12i.w[ ]+\$t1,[ ]+-256
|
|
-[ ]+8:[ ]+16001fed[ ]+lu32i.d[ ]+\$t1,[ ]+255
|
|
-[ ]+c:[ ]+02bffc0e[ ]+li.w[ ]+\$t2,[ ]+-1
|
|
-[ ]+10:[ ]+1601ffee[ ]+lu32i.d[ ]+\$t2,[ ]+4095
|
|
-[ ]+14:[ ]+0004b58b[ ]+alsl.w[ ]+\$a7,[ ]+\$t0,[ ]+\$t1,[ ]+0x2
|
|
-[ ]+18:[ ]+0006b58b[ ]+alsl.wu[ ]+\$a7,[ ]+\$t0,[ ]+\$t1,[ ]+0x2
|
|
-[ ]+1c:[ ]+0009358b[ ]+bytepick.w[ ]+\$a7,[ ]+\$t0,[ ]+\$t1,[ ]+0x2
|
|
-[ ]+20:[ ]+000d358b[ ]+bytepick.d[ ]+\$a7,[ ]+\$t0,[ ]+\$t1,[ ]+0x2
|
|
+[ ]*0000000000000000 <.text>:
|
|
+[ ]+0:[ ]+03848c0c[ ]+li.w[ ]+\$t0, 0x123
|
|
+[ ]+4:[ ]+15ffe00d[ ]+lu12i.w[ ]+\$t1, -256
|
|
+[ ]+8:[ ]+16001fed[ ]+lu32i.d[ ]+\$t1, 255
|
|
+[ ]+c:[ ]+02bffc0e[ ]+li.w[ ]+\$t2, -1
|
|
+[ ]+10:[ ]+1601ffee[ ]+lu32i.d[ ]+\$t2, 4095
|
|
+[ ]+14:[ ]+0004b58b[ ]+alsl.w[ ]+\$a7, \$t0, \$t1, 0x2
|
|
+[ ]+18:[ ]+0006b58b[ ]+alsl.wu[ ]+\$a7, \$t0, \$t1, 0x2
|
|
+[ ]+1c:[ ]+0009358b[ ]+bytepick.w[ ]+\$a7, \$t0, \$t1, 0x2
|
|
+[ ]+20:[ ]+000d358b[ ]+bytepick.d[ ]+\$a7, \$t0, \$t1, 0x2
|
|
[ ]+24:[ ]+002a0002[ ]+break[ ]+0x2
|
|
[ ]+28:[ ]+002a8002[ ]+dbcl[ ]+0x2
|
|
[ ]+2c:[ ]+002b0002[ ]+syscall[ ]+0x2
|
|
-[ ]+30:[ ]+002cb58b[ ]+alsl.d[ ]+\$a7,[ ]+\$t0,[ ]+\$t1,[ ]+0x2
|
|
-[ ]+34:[ ]+0040898b[ ]+slli.w[ ]+\$a7,[ ]+\$t0,[ ]+0x2
|
|
-[ ]+38:[ ]+0041098b[ ]+slli.d[ ]+\$a7,[ ]+\$t0,[ ]+0x2
|
|
-[ ]+3c:[ ]+0044898b[ ]+srli.w[ ]+\$a7,[ ]+\$t0,[ ]+0x2
|
|
-[ ]+40:[ ]+004509ac[ ]+srli.d[ ]+\$t0,[ ]+\$t1,[ ]+0x2
|
|
-[ ]+44:[ ]+004889ac[ ]+srai.w[ ]+\$t0,[ ]+\$t1,[ ]+0x2
|
|
-[ ]+48:[ ]+004909ac[ ]+srai.d[ ]+\$t0,[ ]+\$t1,[ ]+0x2
|
|
-[ ]+4c:[ ]+006209ac[ ]+bstrins.w[ ]+\$t0,[ ]+\$t1,[ ]+0x2,[ ]+0x2
|
|
-[ ]+50:[ ]+008209ac[ ]+bstrins.d[ ]+\$t0,[ ]+\$t1,[ ]+0x2,[ ]+0x2
|
|
-[ ]+54:[ ]+00c209ac[ ]+bstrpick.d[ ]+\$t0,[ ]+\$t1,[ ]+0x2,[ ]+0x2
|
|
-[ ]+58:[ ]+00c209ac[ ]+bstrpick.d[ ]+\$t0,[ ]+\$t1,[ ]+0x2,[ ]+0x2
|
|
-[ ]+5c:[ ]+02048dac[ ]+slti[ ]+\$t0,[ ]+\$t1,[ ]+291
|
|
-[ ]+60:[ ]+02448dac[ ]+sltui[ ]+\$t0,[ ]+\$t1,[ ]+291
|
|
-[ ]+64:[ ]+02848dac[ ]+addi.w[ ]+\$t0,[ ]+\$t1,[ ]+291
|
|
-[ ]+68:[ ]+02c48dac[ ]+addi.d[ ]+\$t0,[ ]+\$t1,[ ]+291
|
|
-[ ]+6c:[ ]+03048dac[ ]+lu52i.d[ ]+\$t0,[ ]+\$t1,[ ]+291
|
|
-[ ]+70:[ ]+034009ac[ ]+andi[ ]+\$t0,[ ]+\$t1,[ ]+0x2
|
|
-[ ]+74:[ ]+038009ac[ ]+ori[ ]+\$t0,[ ]+\$t1,[ ]+0x2
|
|
-[ ]+78:[ ]+03c009ac[ ]+xori[ ]+\$t0,[ ]+\$t1,[ ]+0x2
|
|
-[ ]+7c:[ ]+100009ac[ ]+addu16i.d[ ]+\$t0,[ ]+\$t1,[ ]+2
|
|
-[ ]+80:[ ]+1400246c[ ]+lu12i.w[ ]+\$t0,[ ]+291
|
|
-[ ]+84:[ ]+1600246c[ ]+lu32i.d[ ]+\$t0,[ ]+291
|
|
-[ ]+88:[ ]+1800246c[ ]+pcaddi[ ]+\$t0,[ ]+291
|
|
-[ ]+8c:[ ]+1a00246c[ ]+pcalau12i[ ]+\$t0,[ ]+291
|
|
-[ ]+90:[ ]+1c00246c[ ]+pcaddu12i[ ]+\$t0,[ ]+291
|
|
-[ ]+94:[ ]+1e00246c[ ]+pcaddu18i[ ]+\$t0,[ ]+291
|
|
-[ ]+98:[ ]+04048c0c[ ]+csrrd[ ]+\$t0,[ ]+0x123
|
|
-[ ]+9c:[ ]+04048c2c[ ]+csrwr[ ]+\$t0,[ ]+0x123
|
|
-[ ]+a0:[ ]+040009ac[ ]+csrxchg[ ]+\$t0,[ ]+\$t1,[ ]+0x2
|
|
-[ ]+a4:[ ]+060009a2[ ]+cacop[ ]+0x2,[ ]+\$t1,[ ]+2
|
|
-[ ]+a8:[ ]+064009ac[ ]+lddir[ ]+\$t0,[ ]+\$t1,[ ]+0x2
|
|
-[ ]+ac:[ ]+06440980[ ]+ldpte[ ]+\$t0,[ ]+0x2
|
|
-[ ]+b0:[ ]+0649b9a2[ ]+invtlb[ ]+0x2,[ ]+\$t1,[ ]+\$t2
|
|
-[ ]+b4:[ ]+200101ac[ ]+ll.w[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+b8:[ ]+210101ac[ ]+sc.w[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+bc:[ ]+220101ac[ ]+ll.d[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+c0:[ ]+230101ac[ ]+sc.d[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+c4:[ ]+240101ac[ ]+ldptr.w[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+c8:[ ]+250101ac[ ]+stptr.w[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+cc:[ ]+260101ac[ ]+ldptr.d[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+d0:[ ]+270101ac[ ]+stptr.d[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+d4:[ ]+280401ac[ ]+ld.b[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+d8:[ ]+284401ac[ ]+ld.h[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+dc:[ ]+288401ac[ ]+ld.w[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+e0:[ ]+28c401ac[ ]+ld.d[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+e4:[ ]+290401ac[ ]+st.b[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+e8:[ ]+294401ac[ ]+st.h[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+ec:[ ]+298401ac[ ]+st.w[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+f0:[ ]+29c401ac[ ]+st.d[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+f4:[ ]+2a0401ac[ ]+ld.bu[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+f8:[ ]+2a4401ac[ ]+ld.hu[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+fc:[ ]+2a8401ac[ ]+ld.wu[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+100:[ ]+2ac401a2[ ]+preld[ ]+0x2,[ ]+\$t1,[ ]+256
|
|
-[ ]+104:[ ]+382c39a2[ ]+preldx[ ]+0x2,[ ]+\$t1,[ ]+\$t2
|
|
-[ ]+108:[ ]+2b048d8a[ ]+fld.s[ ]+\$ft2,[ ]+\$t0,[ ]+291
|
|
-[ ]+10c:[ ]+2b448d8a[ ]+fst.s[ ]+\$ft2,[ ]+\$t0,[ ]+291
|
|
-[ ]+110:[ ]+2b848d8a[ ]+fld.d[ ]+\$ft2,[ ]+\$t0,[ ]+291
|
|
-[ ]+114:[ ]+2bc48d8a[ ]+fst.d[ ]+\$ft2,[ ]+\$t0,[ ]+291
|
|
+[ ]+30:[ ]+002cb58b[ ]+alsl.d[ ]+\$a7, \$t0, \$t1, 0x2
|
|
+[ ]+34:[ ]+0040898b[ ]+slli.w[ ]+\$a7, \$t0, 0x2
|
|
+[ ]+38:[ ]+0041098b[ ]+slli.d[ ]+\$a7, \$t0, 0x2
|
|
+[ ]+3c:[ ]+0044898b[ ]+srli.w[ ]+\$a7, \$t0, 0x2
|
|
+[ ]+40:[ ]+004509ac[ ]+srli.d[ ]+\$t0, \$t1, 0x2
|
|
+[ ]+44:[ ]+004889ac[ ]+srai.w[ ]+\$t0, \$t1, 0x2
|
|
+[ ]+48:[ ]+004909ac[ ]+srai.d[ ]+\$t0, \$t1, 0x2
|
|
+[ ]+4c:[ ]+006209ac[ ]+bstrins.w[ ]+\$t0, \$t1, 0x2, 0x2
|
|
+[ ]+50:[ ]+008209ac[ ]+bstrins.d[ ]+\$t0, \$t1, 0x2, 0x2
|
|
+[ ]+54:[ ]+00c209ac[ ]+bstrpick.d[ ]+\$t0, \$t1, 0x2, 0x2
|
|
+[ ]+58:[ ]+00c209ac[ ]+bstrpick.d[ ]+\$t0, \$t1, 0x2, 0x2
|
|
+[ ]+5c:[ ]+02048dac[ ]+slti[ ]+\$t0, \$t1, 291
|
|
+[ ]+60:[ ]+02448dac[ ]+sltui[ ]+\$t0, \$t1, 291
|
|
+[ ]+64:[ ]+02848dac[ ]+addi.w[ ]+\$t0, \$t1, 291
|
|
+[ ]+68:[ ]+02c48dac[ ]+addi.d[ ]+\$t0, \$t1, 291
|
|
+[ ]+6c:[ ]+03048dac[ ]+lu52i.d[ ]+\$t0, \$t1, 291
|
|
+[ ]+70:[ ]+034009ac[ ]+andi[ ]+\$t0, \$t1, 0x2
|
|
+[ ]+74:[ ]+038009ac[ ]+ori[ ]+\$t0, \$t1, 0x2
|
|
+[ ]+78:[ ]+03c009ac[ ]+xori[ ]+\$t0, \$t1, 0x2
|
|
+[ ]+7c:[ ]+100009ac[ ]+addu16i.d[ ]+\$t0, \$t1, 2
|
|
+[ ]+80:[ ]+1400246c[ ]+lu12i.w[ ]+\$t0, 291
|
|
+[ ]+84:[ ]+1600246c[ ]+lu32i.d[ ]+\$t0, 291
|
|
+[ ]+88:[ ]+1800000c[ ]+pcaddi[ ]+\$t0, 0
|
|
+[ ]+88: R_LARCH_PCREL20_S2[ ]+\*ABS\*\+0x123
|
|
+[ ]+8c:[ ]+1a00246c[ ]+pcalau12i[ ]+\$t0, 291
|
|
+[ ]+90:[ ]+1c00246c[ ]+pcaddu12i[ ]+\$t0, 291
|
|
+[ ]+94:[ ]+1e00246c[ ]+pcaddu18i[ ]+\$t0, 291
|
|
+[ ]+98:[ ]+04048c0c[ ]+csrrd[ ]+\$t0, 0x123
|
|
+[ ]+9c:[ ]+04048c2c[ ]+csrwr[ ]+\$t0, 0x123
|
|
+[ ]+a0:[ ]+040009ac[ ]+csrxchg[ ]+\$t0, \$t1, 0x2
|
|
+[ ]+a4:[ ]+060009a2[ ]+cacop[ ]+0x2, \$t1, 2
|
|
+[ ]+a8:[ ]+064009ac[ ]+lddir[ ]+\$t0, \$t1, 0x2
|
|
+[ ]+ac:[ ]+06440980[ ]+ldpte[ ]+\$t0, 0x2
|
|
+[ ]+b0:[ ]+0649b9a2[ ]+invtlb[ ]+0x2, \$t1, \$t2
|
|
+[ ]+b4:[ ]+200101ac[ ]+ll.w[ ]+\$t0, \$t1, 256
|
|
+[ ]+b8:[ ]+210101ac[ ]+sc.w[ ]+\$t0, \$t1, 256
|
|
+[ ]+bc:[ ]+220101ac[ ]+ll.d[ ]+\$t0, \$t1, 256
|
|
+[ ]+c0:[ ]+230101ac[ ]+sc.d[ ]+\$t0, \$t1, 256
|
|
+[ ]+c4:[ ]+240101ac[ ]+ldptr.w[ ]+\$t0, \$t1, 256
|
|
+[ ]+c8:[ ]+250101ac[ ]+stptr.w[ ]+\$t0, \$t1, 256
|
|
+[ ]+cc:[ ]+260101ac[ ]+ldptr.d[ ]+\$t0, \$t1, 256
|
|
+[ ]+d0:[ ]+270101ac[ ]+stptr.d[ ]+\$t0, \$t1, 256
|
|
+[ ]+d4:[ ]+280401ac[ ]+ld.b[ ]+\$t0, \$t1, 256
|
|
+[ ]+d8:[ ]+284401ac[ ]+ld.h[ ]+\$t0, \$t1, 256
|
|
+[ ]+dc:[ ]+288401ac[ ]+ld.w[ ]+\$t0, \$t1, 256
|
|
+[ ]+e0:[ ]+28c401ac[ ]+ld.d[ ]+\$t0, \$t1, 256
|
|
+[ ]+e4:[ ]+290401ac[ ]+st.b[ ]+\$t0, \$t1, 256
|
|
+[ ]+e8:[ ]+294401ac[ ]+st.h[ ]+\$t0, \$t1, 256
|
|
+[ ]+ec:[ ]+298401ac[ ]+st.w[ ]+\$t0, \$t1, 256
|
|
+[ ]+f0:[ ]+29c401ac[ ]+st.d[ ]+\$t0, \$t1, 256
|
|
+[ ]+f4:[ ]+2a0401ac[ ]+ld.bu[ ]+\$t0, \$t1, 256
|
|
+[ ]+f8:[ ]+2a4401ac[ ]+ld.hu[ ]+\$t0, \$t1, 256
|
|
+[ ]+fc:[ ]+2a8401ac[ ]+ld.wu[ ]+\$t0, \$t1, 256
|
|
+[ ]+100:[ ]+2ac401a2[ ]+preld[ ]+0x2, \$t1, 256
|
|
+[ ]+104:[ ]+382c39a2[ ]+preldx[ ]+0x2, \$t1, \$t2
|
|
+[ ]+108:[ ]+2b048d8a[ ]+fld.s[ ]+\$ft2, \$t0, 291
|
|
+[ ]+10c:[ ]+2b448d8a[ ]+fst.s[ ]+\$ft2, \$t0, 291
|
|
+[ ]+110:[ ]+2b848d8a[ ]+fld.d[ ]+\$ft2, \$t0, 291
|
|
+[ ]+114:[ ]+2bc48d8a[ ]+fst.d[ ]+\$ft2, \$t0, 291
|
|
diff --git a/gas/testsuite/gas/loongarch/imm_ins_32.d b/gas/testsuite/gas/loongarch/imm_ins_32.d
|
|
index dc2eeb9e..3662fdda 100644
|
|
--- a/gas/testsuite/gas/loongarch/imm_ins_32.d
|
|
+++ b/gas/testsuite/gas/loongarch/imm_ins_32.d
|
|
@@ -7,51 +7,52 @@
|
|
|
|
Disassembly of section .text:
|
|
|
|
-00000000.* <.text>:
|
|
-[ ]+0:[ ]+03848c0c[ ]+li.w[ ]+\$t0,[ ]+0x123
|
|
-[ ]+4:[ ]+0004b58b[ ]+alsl.w[ ]+\$a7,[ ]+\$t0,[ ]+\$t1,[ ]+0x2
|
|
-[ ]+8:[ ]+0006b58b[ ]+alsl.wu[ ]+\$a7,[ ]+\$t0,[ ]+\$t1,[ ]+0x2
|
|
-[ ]+c:[ ]+0009358b[ ]+bytepick.w[ ]+\$a7,[ ]+\$t0,[ ]+\$t1,[ ]+0x2
|
|
+.* <.text>:
|
|
+[ ]+0:[ ]+03848c0c[ ]+li.w[ ]+\$t0, 0x123
|
|
+[ ]+4:[ ]+0004b58b[ ]+alsl.w[ ]+\$a7, \$t0, \$t1, 0x2
|
|
+[ ]+8:[ ]+0006b58b[ ]+alsl.wu[ ]+\$a7, \$t0, \$t1, 0x2
|
|
+[ ]+c:[ ]+0009358b[ ]+bytepick.w[ ]+\$a7, \$t0, \$t1, 0x2
|
|
[ ]+10:[ ]+002a0002[ ]+break[ ]+0x2
|
|
[ ]+14:[ ]+002a8002[ ]+dbcl[ ]+0x2
|
|
[ ]+18:[ ]+002b0002[ ]+syscall[ ]+0x2
|
|
-[ ]+1c:[ ]+0040898b[ ]+slli.w[ ]+\$a7,[ ]+\$t0,[ ]+0x2
|
|
-[ ]+20:[ ]+0044898b[ ]+srli.w[ ]+\$a7,[ ]+\$t0,[ ]+0x2
|
|
-[ ]+24:[ ]+004889ac[ ]+srai.w[ ]+\$t0,[ ]+\$t1,[ ]+0x2
|
|
-[ ]+28:[ ]+006209ac[ ]+bstrins.w[ ]+\$t0,[ ]+\$t1,[ ]+0x2,[ ]+0x2
|
|
-[ ]+2c:[ ]+02048dac[ ]+slti[ ]+\$t0,[ ]+\$t1,[ ]+291
|
|
-[ ]+30:[ ]+02448dac[ ]+sltui[ ]+\$t0,[ ]+\$t1,[ ]+291
|
|
-[ ]+34:[ ]+02848dac[ ]+addi.w[ ]+\$t0,[ ]+\$t1,[ ]+291
|
|
-[ ]+38:[ ]+034009ac[ ]+andi[ ]+\$t0,[ ]+\$t1,[ ]+0x2
|
|
-[ ]+3c:[ ]+038009ac[ ]+ori[ ]+\$t0,[ ]+\$t1,[ ]+0x2
|
|
-[ ]+40:[ ]+03c009ac[ ]+xori[ ]+\$t0,[ ]+\$t1,[ ]+0x2
|
|
-[ ]+44:[ ]+1400246c[ ]+lu12i.w[ ]+\$t0,[ ]+291
|
|
-[ ]+48:[ ]+1800246c[ ]+pcaddi[ ]+\$t0,[ ]+291
|
|
-[ ]+4c:[ ]+1a00246c[ ]+pcalau12i[ ]+\$t0,[ ]+291
|
|
-[ ]+50:[ ]+1c00246c[ ]+pcaddu12i[ ]+\$t0,[ ]+291
|
|
-[ ]+54:[ ]+1e00246c[ ]+pcaddu18i[ ]+\$t0,[ ]+291
|
|
-[ ]+58:[ ]+04048c0c[ ]+csrrd[ ]+\$t0,[ ]+0x123
|
|
-[ ]+5c:[ ]+04048c2c[ ]+csrwr[ ]+\$t0,[ ]+0x123
|
|
-[ ]+60:[ ]+040009ac[ ]+csrxchg[ ]+\$t0,[ ]+\$t1,[ ]+0x2
|
|
-[ ]+64:[ ]+060009a2[ ]+cacop[ ]+0x2,[ ]+\$t1,[ ]+2
|
|
-[ ]+68:[ ]+064009ac[ ]+lddir[ ]+\$t0,[ ]+\$t1,[ ]+0x2
|
|
-[ ]+6c:[ ]+06440980[ ]+ldpte[ ]+\$t0,[ ]+0x2
|
|
-[ ]+70:[ ]+0649b9a2[ ]+invtlb[ ]+0x2,[ ]+\$t1,[ ]+\$t2
|
|
-[ ]+74:[ ]+200101ac[ ]+ll.w[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+78:[ ]+210101ac[ ]+sc.w[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+7c:[ ]+220101ac[ ]+ll.d[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+80:[ ]+230101ac[ ]+sc.d[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+84:[ ]+240101ac[ ]+ldptr.w[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+88:[ ]+250101ac[ ]+stptr.w[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+8c:[ ]+284401ac[ ]+ld.h[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+90:[ ]+288401ac[ ]+ld.w[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+94:[ ]+290401ac[ ]+st.b[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+98:[ ]+294401ac[ ]+st.h[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+9c:[ ]+298401ac[ ]+st.w[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+a0:[ ]+2a0401ac[ ]+ld.bu[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+a4:[ ]+2a4401ac[ ]+ld.hu[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+a8:[ ]+2a8401ac[ ]+ld.wu[ ]+\$t0,[ ]+\$t1,[ ]+256
|
|
-[ ]+ac:[ ]+2ac401a2[ ]+preld[ ]+0x2,[ ]+\$t1,[ ]+256
|
|
-[ ]+b0:[ ]+382c39a2[ ]+preldx[ ]+0x2,[ ]+\$t1,[ ]+\$t2
|
|
-[ ]+b4:[ ]+2b048d8a[ ]+fld.s[ ]+\$ft2,[ ]+\$t0,[ ]+291
|
|
-[ ]+b8:[ ]+2b448d8a[ ]+fst.s[ ]+\$ft2,[ ]+\$t0,[ ]+291
|
|
+[ ]+1c:[ ]+0040898b[ ]+slli.w[ ]+\$a7, \$t0, 0x2
|
|
+[ ]+20:[ ]+0044898b[ ]+srli.w[ ]+\$a7, \$t0, 0x2
|
|
+[ ]+24:[ ]+004889ac[ ]+srai.w[ ]+\$t0, \$t1, 0x2
|
|
+[ ]+28:[ ]+006209ac[ ]+bstrins.w[ ]+\$t0, \$t1, 0x2, 0x2
|
|
+[ ]+2c:[ ]+02048dac[ ]+slti[ ]+\$t0, \$t1, 291
|
|
+[ ]+30:[ ]+02448dac[ ]+sltui[ ]+\$t0, \$t1, 291
|
|
+[ ]+34:[ ]+02848dac[ ]+addi.w[ ]+\$t0, \$t1, 291
|
|
+[ ]+38:[ ]+034009ac[ ]+andi[ ]+\$t0, \$t1, 0x2
|
|
+[ ]+3c:[ ]+038009ac[ ]+ori[ ]+\$t0, \$t1, 0x2
|
|
+[ ]+40:[ ]+03c009ac[ ]+xori[ ]+\$t0, \$t1, 0x2
|
|
+[ ]+44:[ ]+1400246c[ ]+lu12i.w[ ]+\$t0, 291
|
|
+[ ]+48:[ ]+1800000c[ ]+pcaddi[ ]+\$t0, 0
|
|
+[ ]+48: R_LARCH_PCREL20_S2[ ]+\*ABS\*\+0x123
|
|
+[ ]+4c:[ ]+1a00246c[ ]+pcalau12i[ ]+\$t0, 291
|
|
+[ ]+50:[ ]+1c00246c[ ]+pcaddu12i[ ]+\$t0, 291
|
|
+[ ]+54:[ ]+1e00246c[ ]+pcaddu18i[ ]+\$t0, 291
|
|
+[ ]+58:[ ]+04048c0c[ ]+csrrd[ ]+\$t0, 0x123
|
|
+[ ]+5c:[ ]+04048c2c[ ]+csrwr[ ]+\$t0, 0x123
|
|
+[ ]+60:[ ]+040009ac[ ]+csrxchg[ ]+\$t0, \$t1, 0x2
|
|
+[ ]+64:[ ]+060009a2[ ]+cacop[ ]+0x2, \$t1, 2
|
|
+[ ]+68:[ ]+064009ac[ ]+lddir[ ]+\$t0, \$t1, 0x2
|
|
+[ ]+6c:[ ]+06440980[ ]+ldpte[ ]+\$t0, 0x2
|
|
+[ ]+70:[ ]+0649b9a2[ ]+invtlb[ ]+0x2, \$t1, \$t2
|
|
+[ ]+74:[ ]+200101ac[ ]+ll.w[ ]+\$t0, \$t1, 256
|
|
+[ ]+78:[ ]+210101ac[ ]+sc.w[ ]+\$t0, \$t1, 256
|
|
+[ ]+7c:[ ]+220101ac[ ]+ll.d[ ]+\$t0, \$t1, 256
|
|
+[ ]+80:[ ]+230101ac[ ]+sc.d[ ]+\$t0, \$t1, 256
|
|
+[ ]+84:[ ]+240101ac[ ]+ldptr.w[ ]+\$t0, \$t1, 256
|
|
+[ ]+88:[ ]+250101ac[ ]+stptr.w[ ]+\$t0, \$t1, 256
|
|
+[ ]+8c:[ ]+284401ac[ ]+ld.h[ ]+\$t0, \$t1, 256
|
|
+[ ]+90:[ ]+288401ac[ ]+ld.w[ ]+\$t0, \$t1, 256
|
|
+[ ]+94:[ ]+290401ac[ ]+st.b[ ]+\$t0, \$t1, 256
|
|
+[ ]+98:[ ]+294401ac[ ]+st.h[ ]+\$t0, \$t1, 256
|
|
+[ ]+9c:[ ]+298401ac[ ]+st.w[ ]+\$t0, \$t1, 256
|
|
+[ ]+a0:[ ]+2a0401ac[ ]+ld.bu[ ]+\$t0, \$t1, 256
|
|
+[ ]+a4:[ ]+2a4401ac[ ]+ld.hu[ ]+\$t0, \$t1, 256
|
|
+[ ]+a8:[ ]+2a8401ac[ ]+ld.wu[ ]+\$t0, \$t1, 256
|
|
+[ ]+ac:[ ]+2ac401a2[ ]+preld[ ]+0x2, \$t1, 256
|
|
+[ ]+b0:[ ]+382c39a2[ ]+preldx[ ]+0x2, \$t1, \$t2
|
|
+[ ]+b4:[ ]+2b048d8a[ ]+fld.s[ ]+\$ft2, \$t0, 291
|
|
+[ ]+b8:[ ]+2b448d8a[ ]+fst.s[ ]+\$ft2, \$t0, 291
|
|
diff --git a/gas/testsuite/gas/loongarch/imm_op.d b/gas/testsuite/gas/loongarch/imm_op.d
|
|
index 3d4cba45..2885fc96 100644
|
|
--- a/gas/testsuite/gas/loongarch/imm_op.d
|
|
+++ b/gas/testsuite/gas/loongarch/imm_op.d
|
|
@@ -1,48 +1,48 @@
|
|
#as:
|
|
#objdump: -dr
|
|
|
|
-.*:[ ]+file format .*
|
|
+.*:[ ]+file format .*
|
|
|
|
|
|
Disassembly of section .text:
|
|
|
|
-00000000.* <.text>:
|
|
-[ ]+0:[ ]+020000a4 [ ]+slti[ ]+[ ]+\$a0, \$a1, 0
|
|
-[ ]+4:[ ]+021ffca4 [ ]+slti[ ]+[ ]+\$a0, \$a1, 2047
|
|
-[ ]+8:[ ]+022004a4 [ ]+slti[ ]+[ ]+\$a0, \$a1, -2047
|
|
-[ ]+c:[ ]+024000a4 [ ]+sltui[ ]+[ ]+\$a0, \$a1, 0
|
|
-[ ]+10:[ ]+025ffca4 [ ]+sltui[ ]+[ ]+\$a0, \$a1, 2047
|
|
-[ ]+14:[ ]+026004a4 [ ]+sltui[ ]+[ ]+\$a0, \$a1, -2047
|
|
-[ ]+18:[ ]+028000a4 [ ]+addi.w[ ]+[ ]+\$a0, \$a1, 0
|
|
-[ ]+1c:[ ]+029ffca4 [ ]+addi.w[ ]+[ ]+\$a0, \$a1, 2047
|
|
-[ ]+20:[ ]+02a004a4 [ ]+addi.w[ ]+[ ]+\$a0, \$a1, -2047
|
|
-[ ]+24:[ ]+02c000a4 [ ]+addi.d[ ]+[ ]+\$a0, \$a1, 0
|
|
-[ ]+28:[ ]+02dffca4 [ ]+addi.d[ ]+[ ]+\$a0, \$a1, 2047
|
|
-[ ]+2c:[ ]+02e004a4 [ ]+addi.d[ ]+[ ]+\$a0, \$a1, -2047
|
|
-[ ]+30:[ ]+030000a4 [ ]+lu52i.d[ ]+[ ]+\$a0, \$a1, 0
|
|
-[ ]+34:[ ]+031ffca4 [ ]+lu52i.d[ ]+[ ]+\$a0, \$a1, 2047
|
|
-[ ]+38:[ ]+032004a4 [ ]+lu52i.d[ ]+[ ]+\$a0, \$a1, -2047
|
|
-[ ]+3c:[ ]+034000a4 [ ]+andi[ ]+[ ]+\$a0, \$a1, 0x0
|
|
-[ ]+40:[ ]+035ffca4 [ ]+andi[ ]+[ ]+\$a0, \$a1, 0x7ff
|
|
-[ ]+44:[ ]+038000a4 [ ]+ori[ ]+[ ]+\$a0, \$a1, 0x0
|
|
-[ ]+48:[ ]+039ffca4 [ ]+ori[ ]+[ ]+\$a0, \$a1, 0x7ff
|
|
-[ ]+4c:[ ]+03c000a4 [ ]+xori[ ]+[ ]+\$a0, \$a1, 0x0
|
|
-[ ]+50:[ ]+03dffca4 [ ]+xori[ ]+[ ]+\$a0, \$a1, 0x7ff
|
|
-[ ]+54:[ ]+100000a4 [ ]+addu16i.d[ ]+[ ]+\$a0, \$a1, 0
|
|
-[ ]+58:[ ]+11fffca4 [ ]+addu16i.d[ ]+[ ]+\$a0, \$a1, 32767
|
|
-[ ]+5c:[ ]+120004a4 [ ]+addu16i.d[ ]+[ ]+\$a0, \$a1, -32767
|
|
-[ ]+60:[ ]+14000004 [ ]+lu12i.w[ ]+[ ]+\$a0, 0
|
|
-[ ]+64:[ ]+14ffffe4 [ ]+lu12i.w[ ]+[ ]+\$a0, 524287
|
|
-[ ]+68:[ ]+17000024 [ ]+lu32i.d[ ]+[ ]+\$a0, -524287
|
|
-[ ]+6c:[ ]+18000004 [ ]+pcaddi[ ]+[ ]+\$a0, 0
|
|
-[ ]+70:[ ]+18ffffe4 [ ]+pcaddi[ ]+[ ]+\$a0, 524287
|
|
-[ ]+74:[ ]+19000024 [ ]+pcaddi[ ]+[ ]+\$a0, -524287
|
|
-[ ]+78:[ ]+1a000004 [ ]+pcalau12i[ ]+[ ]+\$a0, 0
|
|
-[ ]+7c:[ ]+1affffe4 [ ]+pcalau12i[ ]+[ ]+\$a0, 524287
|
|
-[ ]+80:[ ]+1b000024 [ ]+pcalau12i[ ]+[ ]+\$a0, -524287
|
|
-[ ]+84:[ ]+1c000004 [ ]+pcaddu12i[ ]+[ ]+\$a0, 0
|
|
-[ ]+88:[ ]+1cffffe4 [ ]+pcaddu12i[ ]+[ ]+\$a0, 524287
|
|
-[ ]+8c:[ ]+1d000024 [ ]+pcaddu12i[ ]+[ ]+\$a0, -524287
|
|
-[ ]+90:[ ]+1e000004 [ ]+pcaddu18i[ ]+[ ]+\$a0, 0
|
|
-[ ]+94:[ ]+1effffe4 [ ]+pcaddu18i[ ]+[ ]+\$a0, 524287
|
|
-[ ]+98:[ ]+1f000024 [ ]+pcaddu18i[ ]+[ ]+\$a0, -524287
|
|
+.* <.text>:
|
|
+[ ]+0:[ ]+020000a4[ ]+slti[ ]+\$a0, \$a1, 0
|
|
+[ ]+4:[ ]+021ffca4[ ]+slti[ ]+\$a0, \$a1, 2047
|
|
+[ ]+8:[ ]+022004a4[ ]+slti[ ]+\$a0, \$a1, -2047
|
|
+[ ]+c:[ ]+024000a4[ ]+sltui[ ]+\$a0, \$a1, 0
|
|
+[ ]+10:[ ]+025ffca4[ ]+sltui[ ]+\$a0, \$a1, 2047
|
|
+[ ]+14:[ ]+026004a4[ ]+sltui[ ]+\$a0, \$a1, -2047
|
|
+[ ]+18:[ ]+028000a4[ ]+addi.w[ ]+\$a0, \$a1, 0
|
|
+[ ]+1c:[ ]+029ffca4[ ]+addi.w[ ]+\$a0, \$a1, 2047
|
|
+[ ]+20:[ ]+02a004a4[ ]+addi.w[ ]+\$a0, \$a1, -2047
|
|
+[ ]+24:[ ]+02c000a4[ ]+addi.d[ ]+\$a0, \$a1, 0
|
|
+[ ]+28:[ ]+02dffca4[ ]+addi.d[ ]+\$a0, \$a1, 2047
|
|
+[ ]+2c:[ ]+02e004a4[ ]+addi.d[ ]+\$a0, \$a1, -2047
|
|
+[ ]+30:[ ]+030000a4[ ]+lu52i.d[ ]+\$a0, \$a1, 0
|
|
+[ ]+34:[ ]+031ffca4[ ]+lu52i.d[ ]+\$a0, \$a1, 2047
|
|
+[ ]+38:[ ]+032004a4[ ]+lu52i.d[ ]+\$a0, \$a1, -2047
|
|
+[ ]+3c:[ ]+034000a4[ ]+andi[ ]+\$a0, \$a1, 0x0
|
|
+[ ]+40:[ ]+035ffca4[ ]+andi[ ]+\$a0, \$a1, 0x7ff
|
|
+[ ]+44:[ ]+038000a4[ ]+ori[ ]+\$a0, \$a1, 0x0
|
|
+[ ]+48:[ ]+039ffca4[ ]+ori[ ]+\$a0, \$a1, 0x7ff
|
|
+[ ]+4c:[ ]+03c000a4[ ]+xori[ ]+\$a0, \$a1, 0x0
|
|
+[ ]+50:[ ]+03dffca4[ ]+xori[ ]+\$a0, \$a1, 0x7ff
|
|
+[ ]+54:[ ]+100000a4[ ]+addu16i.d[ ]+\$a0, \$a1, 0
|
|
+[ ]+58:[ ]+11fffca4[ ]+addu16i.d[ ]+\$a0, \$a1, 32767
|
|
+[ ]+5c:[ ]+120004a4[ ]+addu16i.d[ ]+\$a0, \$a1, -32767
|
|
+[ ]+60:[ ]+14000004[ ]+lu12i.w[ ]+\$a0, 0
|
|
+[ ]+64:[ ]+14ffffe4[ ]+lu12i.w[ ]+\$a0, 524287
|
|
+[ ]+68:[ ]+17000024[ ]+lu32i.d[ ]+\$a0, -524287
|
|
+[ ]+6c:[ ]+18000004[ ]+pcaddi[ ]+\$a0, 0
|
|
+[ ]+70:[ ]+18ffffe4[ ]+pcaddi[ ]+\$a0, 524287
|
|
+[ ]+74:[ ]+19000004[ ]+pcaddi[ ]+\$a0, -524288
|
|
+[ ]+78:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0, 0
|
|
+[ ]+7c:[ ]+1affffe4[ ]+pcalau12i[ ]+\$a0, 524287
|
|
+[ ]+80:[ ]+1b000024[ ]+pcalau12i[ ]+\$a0, -524287
|
|
+[ ]+84:[ ]+1c000004[ ]+pcaddu12i[ ]+\$a0, 0
|
|
+[ ]+88:[ ]+1cffffe4[ ]+pcaddu12i[ ]+\$a0, 524287
|
|
+[ ]+8c:[ ]+1d000024[ ]+pcaddu12i[ ]+\$a0, -524287
|
|
+[ ]+90:[ ]+1e000004[ ]+pcaddu18i[ ]+\$a0, 0
|
|
+[ ]+94:[ ]+1effffe4[ ]+pcaddu18i[ ]+\$a0, 524287
|
|
+[ ]+98:[ ]+1f000024[ ]+pcaddu18i[ ]+\$a0, -524287
|
|
diff --git a/gas/testsuite/gas/loongarch/imm_op.s b/gas/testsuite/gas/loongarch/imm_op.s
|
|
index 7e1c5518..eae18260 100644
|
|
--- a/gas/testsuite/gas/loongarch/imm_op.s
|
|
+++ b/gas/testsuite/gas/loongarch/imm_op.s
|
|
@@ -27,7 +27,7 @@ lu12i.w $r4,0x7ffff
|
|
lu32i.d $r4,-0x7ffff
|
|
pcaddi $r4,0
|
|
pcaddi $r4,0x7ffff
|
|
-pcaddi $r4,-0x7ffff
|
|
+pcaddi $r4,-0x80000
|
|
pcalau12i $r4,0
|
|
pcalau12i $r4,0x7ffff
|
|
pcalau12i $r4,-0x7ffff
|
|
diff --git a/gas/testsuite/gas/loongarch/pcaddi.d b/gas/testsuite/gas/loongarch/pcaddi.d
|
|
new file mode 100644
|
|
index 00000000..3ddbbba5
|
|
--- /dev/null
|
|
+++ b/gas/testsuite/gas/loongarch/pcaddi.d
|
|
@@ -0,0 +1,13 @@
|
|
+#as:
|
|
+#objdump: -dr
|
|
+
|
|
+.*:[ ]+file format .*
|
|
+
|
|
+
|
|
+Disassembly of section .text:
|
|
+
|
|
+.* <.L1>:
|
|
+[ ]+0:[ ]+1800000c[ ]+pcaddi[ ]+\$t0, 0
|
|
+[ ]+0: R_LARCH_PCREL20_S2[ ]+.L1
|
|
+[ ]+4:[ ]+1800000c[ ]+pcaddi[ ]+\$t0, 0
|
|
+[ ]+4: R_LARCH_PCREL20_S2[ ]+.L2
|
|
diff --git a/gas/testsuite/gas/loongarch/pcaddi.s b/gas/testsuite/gas/loongarch/pcaddi.s
|
|
new file mode 100644
|
|
index 00000000..10d23e84
|
|
--- /dev/null
|
|
+++ b/gas/testsuite/gas/loongarch/pcaddi.s
|
|
@@ -0,0 +1,4 @@
|
|
+.L1:
|
|
+ pcaddi $r12, .L1
|
|
+ pcaddi $r12, .L2
|
|
+.L2:
|
|
diff --git a/opcodes/loongarch-opc.c b/opcodes/loongarch-opc.c
|
|
index 4a88c4d7..5cd1411a 100644
|
|
--- a/opcodes/loongarch-opc.c
|
|
+++ b/opcodes/loongarch-opc.c
|
|
@@ -340,7 +340,7 @@ static struct loongarch_opcode loongarch_macro_opcodes[] =
|
|
{ 0, 0, "la.tls.gd", "r,l", INSN_LA_TLS_GD64, 0 },
|
|
{ 0, 0, "la.tls.gd", "r,l", INSN_LA_TLS_GD64_LARGE_ABS, 0 },
|
|
{ 0, 0, "la.tls.gd", "r,r,l", INSN_LA_TLS_GD64_LARGE_PCREL, 0 },
|
|
-
|
|
+ { 0, 0, "pcaddi", "r,la", "pcaddi %1, %%pcrel_20(%2)", &LARCH_opts.ase_ilp32, 0, 0 },
|
|
{ 0, 0, 0, 0, 0, 0, 0, 0 } /* Terminate the list. */
|
|
};
|
|
|
|
--
|
|
2.33.0
|
|
|