opcodes: LoongArch: make all non-native jumps desugar to canonical b{lt/ge}[u] forms
authorWANG Xuerui <git@xen0n.name>
Wed, 27 Jul 2022 11:07:56 +0000 (19:07 +0800)
committerliuzhensong <liuzhensong@loongson.cn>
Mon, 1 Aug 2022 07:57:30 +0000 (15:57 +0800)
Also re-order the jump/branch opcodes while at it, so that insns are
sorted in ascending order according to opcodes, and the label form
preceding the real definition.

gas/testsuite/gas/loongarch/jmp_op.d
ld/testsuite/ld-loongarch-elf/jmp_op.d
opcodes/loongarch-opc.c

index fa939c780edd7bafc9fc7ddf2dfe8713488e57e9..b10390f640fc48f4768993681005d6a0fc6c0b81 100644 (file)
@@ -8,9 +8,9 @@ Disassembly of section .text:
 
 00000000.* <.text>:
 [      ]+0:[   ]+03400000[     ]+[     ]+andi[         ]+\$zero, \$zero, 0x0
-[      ]+4:[   ]+63fffc04[     ]+[     ]+bgtz[         ]+\$a0, -4\(0x3fffc\)[  ]+# 0x0
-[      ]+8:[   ]+67fff880[     ]+[     ]+bgez[         ]+\$a0, -8\(0x3fff8\)[  ]+# 0x0
-[      ]+c:[   ]+67fff404[     ]+[     ]+blez[         ]+\$a0, -12\(0x3fff4\)[         ]+# 0x0
+[      ]+4:[   ]+63fffc04[     ]+[     ]+blt[  ]+\$zero, \$a0, -4\(0x3fffc\)[  ]+# 0x0
+[      ]+8:[   ]+67fff880[     ]+[     ]+bge[  ]+\$a0, \$zero, -8\(0x3fff8\)[  ]+# 0x0
+[      ]+c:[   ]+67fff404[     ]+[     ]+bge[  ]+\$zero, \$a0, -12\(0x3fff4\)[         ]+# 0x0
 [      ]+10:[  ]+43fff09f[     ]+[     ]+beqz[         ]+\$a0, -16\(0x7ffff0\)[        ]+# 0x0
 [      ]+14:[  ]+47ffec9f[     ]+[     ]+bnez[         ]+\$a0, -20\(0x7fffec\)[        ]+# 0x0
 [      ]+18:[  ]+4bffe81f[     ]+[     ]+bceqz[        ]+\$fcc0, -24\(0x7fffe8\)[      ]+# 0x0
index 93452c317bb8e65f6c36e40669e0ed60f191c82c..b10390f640fc48f4768993681005d6a0fc6c0b81 100644 (file)
@@ -7,24 +7,24 @@
 Disassembly of section .text:
 
 00000000.* <.text>:
-[      ]+0:[   ]+03400000[     ]+andi[         ]+\$zero,[      ]+\$zero,[      ]+0x0
-[      ]+4:[   ]+63fffc04[     ]+bgtz[         ]+\$a0,[        ]+-4\(0x3fffc\)[        ]+#[    ]+0x0
-[      ]+8:[   ]+67fff880[     ]+bgez[         ]+\$a0,[        ]+-8\(0x3fff8\)[        ]+#[    ]+0x0
-[      ]+c:[   ]+67fff404[     ]+blez[         ]+\$a0,[        ]+-12\(0x3fff4\)[       ]+#[    ]+0x0
-[      ]+10:[  ]+43fff09f[     ]+beqz[         ]+\$a0,[        ]+-16\(0x7ffff0\)[      ]+#[    ]+0x0
-[      ]+14:[  ]+47ffec9f[     ]+bnez[         ]+\$a0,[        ]+-20\(0x7fffec\)[      ]+#[    ]+0x0
-[      ]+18:[  ]+4bffe81f[     ]+bceqz[        ]+\$fcc0,[      ]+-24\(0x7fffe8\)[      ]+#[    ]+0x0
-[      ]+1c:[  ]+4bffe51f[     ]+bcnez[        ]+\$fcc0,[      ]+-28\(0x7fffe4\)[      ]+#[    ]+0x0
-[      ]+20:[  ]+4c000080[     ]+jirl[         ]+\$zero,[      ]+\$a0,[        ]+0
-[      ]+24:[  ]+53ffdfff[     ]+b[    ]+-36\(0xfffffdc\)[     ]+#[    ]+0x0
-[      ]+28:[  ]+57ffdbff[     ]+bl[   ]+-40\(0xfffffd8\)[     ]+#[    ]+0x0
-[      ]+2c:[  ]+5bffd485[     ]+beq[  ]+\$a0,[        ]+\$a1,[        ]+-44\(0x3ffd4\)[       ]+#[    ]+0x0
-[      ]+30:[  ]+5fffd085[     ]+bne[  ]+\$a0,[        ]+\$a1,[        ]+-48\(0x3ffd0\)[       ]+#[    ]+0x0
-[      ]+34:[  ]+63ffcc85[     ]+blt[  ]+\$a0,[        ]+\$a1,[        ]+-52\(0x3ffcc\)[       ]+#[    ]+0x0
-[      ]+38:[  ]+63ffc8a4[     ]+blt[  ]+\$a1,[        ]+\$a0,[        ]+-56\(0x3ffc8\)[       ]+#[    ]+0x0
-[      ]+3c:[  ]+67ffc485[     ]+bge[  ]+\$a0,[        ]+\$a1,[        ]+-60\(0x3ffc4\)[       ]+#[    ]+0x0
-[      ]+40:[  ]+67ffc0a4[     ]+bge[  ]+\$a1,[        ]+\$a0,[        ]+-64\(0x3ffc0\)[       ]+#[    ]+0x0
-[      ]+44:[  ]+6bffbc85[     ]+bltu[         ]+\$a0,[        ]+\$a1,[        ]+-68\(0x3ffbc\)[       ]+#[    ]+0x0
-[      ]+48:[  ]+6bffb8a4[     ]+bltu[         ]+\$a1,[        ]+\$a0,[        ]+-72\(0x3ffb8\)[       ]+#[    ]+0x0
-[      ]+4c:[  ]+6fffb485[     ]+bgeu[         ]+\$a0,[        ]+\$a1,[        ]+-76\(0x3ffb4\)[       ]+#[    ]+0x0
-[      ]+50:[  ]+6fffb0a4[     ]+bgeu[         ]+\$a1,[        ]+\$a0,[        ]+-80\(0x3ffb0\)[       ]+#[    ]+0x0
+[      ]+0:[   ]+03400000[     ]+[     ]+andi[         ]+\$zero, \$zero, 0x0
+[      ]+4:[   ]+63fffc04[     ]+[     ]+blt[  ]+\$zero, \$a0, -4\(0x3fffc\)[  ]+# 0x0
+[      ]+8:[   ]+67fff880[     ]+[     ]+bge[  ]+\$a0, \$zero, -8\(0x3fff8\)[  ]+# 0x0
+[      ]+c:[   ]+67fff404[     ]+[     ]+bge[  ]+\$zero, \$a0, -12\(0x3fff4\)[         ]+# 0x0
+[      ]+10:[  ]+43fff09f[     ]+[     ]+beqz[         ]+\$a0, -16\(0x7ffff0\)[        ]+# 0x0
+[      ]+14:[  ]+47ffec9f[     ]+[     ]+bnez[         ]+\$a0, -20\(0x7fffec\)[        ]+# 0x0
+[      ]+18:[  ]+4bffe81f[     ]+[     ]+bceqz[        ]+\$fcc0, -24\(0x7fffe8\)[      ]+# 0x0
+[      ]+1c:[  ]+4bffe51f[     ]+[     ]+bcnez[        ]+\$fcc0, -28\(0x7fffe4\)[      ]+# 0x0
+[      ]+20:[  ]+4c000080[     ]+[     ]+jirl[         ]+\$zero, \$a0, 0
+[      ]+24:[  ]+53ffdfff[     ]+[     ]+b[    ]+-36\(0xfffffdc\)[     ]+# 0x0
+[      ]+28:[  ]+57ffdbff[     ]+[     ]+bl[   ]+-40\(0xfffffd8\)[     ]+# 0x0
+[      ]+2c:[  ]+5bffd485[     ]+[     ]+beq[  ]+\$a0, \$a1, -44\(0x3ffd4\)[   ]+# 0x0
+[      ]+30:[  ]+5fffd085[     ]+[     ]+bne[  ]+\$a0, \$a1, -48\(0x3ffd0\)[   ]+# 0x0
+[      ]+34:[  ]+63ffcc85[     ]+[     ]+blt[  ]+\$a0, \$a1, -52\(0x3ffcc\)[   ]+# 0x0
+[      ]+38:[  ]+63ffc8a4[     ]+[     ]+blt[  ]+\$a1, \$a0, -56\(0x3ffc8\)[   ]+# 0x0
+[      ]+3c:[  ]+67ffc485[     ]+[     ]+bge[  ]+\$a0, \$a1, -60\(0x3ffc4\)[   ]+# 0x0
+[      ]+40:[  ]+67ffc0a4[     ]+[     ]+bge[  ]+\$a1, \$a0, -64\(0x3ffc0\)[   ]+# 0x0
+[      ]+44:[  ]+6bffbc85[     ]+[     ]+bltu[         ]+\$a0, \$a1, -68\(0x3ffbc\)[   ]+# 0x0
+[      ]+48:[  ]+6bffb8a4[     ]+[     ]+bltu[         ]+\$a1, \$a0, -72\(0x3ffb8\)[   ]+# 0x0
+[      ]+4c:[  ]+6fffb485[     ]+[     ]+bgeu[         ]+\$a0, \$a1, -76\(0x3ffb4\)[   ]+# 0x0
+[      ]+50:[  ]+6fffb0a4[     ]+[     ]+bgeu[         ]+\$a1, \$a0, -80\(0x3ffb0\)[   ]+# 0x0
index be0de61c3aa354ad1e6d7f4817f8a3d883d95eb6..35bae8c3ed411e11e1c0ceb921bd5eb10e69a4b0 100644 (file)
@@ -810,22 +810,13 @@ static struct loongarch_opcode loongarch_float_jmp_opcodes[] =
 static struct loongarch_opcode loongarch_jmp_opcodes[] =
 {
   /* match,    mask,           name,           format,                         macro,                  include, exclude, pinfo.  */
-  { 0x0,       0x0,            "bltz",         "r,la",                         "bltz %1,%%b16(%2)",            0, 0, 0 },
-  { 0x60000000, 0xfc00001f,    "bltz",         "r5:5,sb10:16<<2",              0,                              0, 0, 0 },
-  { 0x0,       0x0,            "bgtz",         "r,la",                         "bgtz %1,%%b16(%2)",            0, 0, 0 },
-  { 0x60000000, 0xfc0003e0,    "bgtz",         "r0:5,sb10:16<<2",              0,                              0, 0, 0 },
-  { 0x0,       0x0,            "bgez",         "r,la",                         "bgez %1,%%b16(%2)",            0, 0, 0 },
-  { 0x64000000, 0xfc00001f,    "bgez",         "r5:5,sb10:16<<2",              0,                              0, 0, 0 },
-  { 0x0,       0x0,            "blez",         "r,la",                         "blez %1,%%b16(%2)",            0, 0, 0 },
-  { 0x64000000, 0xfc0003e0,    "blez",         "r0:5,sb10:16<<2",              0,                              0, 0, 0 },
   { 0x0,       0x0,            "beqz",         "r,la",                         "beqz %1,%%b21(%2)",            0, 0, 0 },
   { 0x40000000, 0xfc000000,    "beqz",         "r5:5,sb0:5|10:16<<2",          0,                              0, 0, 0 },
   { 0x0,       0x0,            "bnez",         "r,la",                         "bnez %1,%%b21(%2)",            0, 0, 0 },
   { 0x44000000, 0xfc000000,    "bnez",         "r5:5,sb0:5|10:16<<2",          0,                              0, 0, 0 },
-  { 0x0,       0x0,            "jr",           "r",                            "jirl $r0,%1,0",                0, 0, 0 },
-  { 0x50000000, 0xfc000000,    "b",            "sb0:10|10:16<<2",              0,                              0, 0, 0 },
-  { 0x0,       0x0,            "b",            "la",                           "b %%b26(%1)",                  0, 0, 0 },
   { 0x4c000000, 0xfc000000,    "jirl",         "r0:5,r5:5,s10:16<<2",          0,                              0, 0, 0 },
+  { 0x0,       0x0,            "b",            "la",                           "b %%b26(%1)",                  0, 0, 0 },
+  { 0x50000000, 0xfc000000,    "b",            "sb0:10|10:16<<2",              0,                              0, 0, 0 },
   { 0x0,       0x0,            "bl",           "la",                           "bl %%b26(%1)",                 0, 0, 0 },
   { 0x54000000, 0xfc000000,    "bl",           "sb0:10|10:16<<2",              0,                              0, 0, 0 },
   { 0x0,       0x0,            "beq",          "r,r,la",                       "beq %1,%2,%%b16(%3)",          0, 0, 0 },
@@ -834,20 +825,22 @@ static struct loongarch_opcode loongarch_jmp_opcodes[] =
   { 0x5c000000, 0xfc000000,    "bne",          "r5:5,r0:5,sb10:16<<2",         0,                              0, 0, 0 },
   { 0x0,       0x0,            "blt",          "r,r,la",                       "blt %1,%2,%%b16(%3)",          0, 0, 0 },
   { 0x60000000, 0xfc000000,    "blt",          "r5:5,r0:5,sb10:16<<2",         0,                              0, 0, 0 },
-  { 0x0,       0x0,            "bgt",          "r,r,la",                       "bgt %1,%2,%%b16(%3)",          0, 0, 0 },
-  { 0x60000000, 0xfc000000,    "bgt",          "r0:5,r5:5,sb10:16<<2",         0,                              0, 0, 0 },
   { 0x0,       0x0,            "bge",          "r,r,la",                       "bge %1,%2,%%b16(%3)",          0, 0, 0 },
   { 0x64000000, 0xfc000000,    "bge",          "r5:5,r0:5,sb10:16<<2",         0,                              0, 0, 0 },
-  { 0x0,       0x0,            "ble",          "r,r,la",                       "ble %1,%2,%%b16(%3)",          0, 0, 0 },
-  { 0x64000000, 0xfc000000,    "ble",          "r0:5,r5:5,sb10:16<<2",         0,                              0, 0, 0 },
   { 0x0,       0x0,            "bltu",         "r,r,la",                       "bltu %1,%2,%%b16(%3)",         0, 0, 0 },
   { 0x68000000, 0xfc000000,    "bltu",         "r5:5,r0:5,sb10:16<<2",         0,                              0, 0, 0 },
-  { 0x0,       0x0,            "bgtu",         "r,r,la",                       "bgtu %1,%2,%%b16(%3)",         0, 0, 0 },
-  { 0x68000000, 0xfc000000,    "bgtu",         "r0:5,r5:5,sb10:16<<2",         0,                              0, 0, 0 },
   { 0x0,       0x0,            "bgeu",         "r,r,la",                       "bgeu %1,%2,%%b16(%3)",         0, 0, 0 },
   { 0x6c000000, 0xfc000000,    "bgeu",         "r5:5,r0:5,sb10:16<<2",         0,                              0, 0, 0 },
-  { 0x0,       0x0,            "bleu",         "r,r,la",                       "bleu %1,%2,%%b16(%3)",         0, 0, 0 },
-  { 0x6c000000, 0xfc000000,    "bleu",         "r0:5,r5:5,sb10:16<<2",         0,                              0, 0, 0 },
+  /* Jumps implemented with macros.  */
+  { 0x0,       0x0,            "bgt",          "r,r,la",                       "blt %2,%1,%%b16(%3)",          0, 0, 0 },
+  { 0x0,       0x0,            "bltz",         "r,la",                         "blt %1,$r0,%%b16(%2)",         0, 0, 0 },
+  { 0x0,       0x0,            "bgtz",         "r,la",                         "blt $r0,%1,%%b16(%2)",         0, 0, 0 },
+  { 0x0,       0x0,            "ble",          "r,r,la",                       "bge %2,%1,%%b16(%3)",          0, 0, 0 },
+  { 0x0,       0x0,            "bgez",         "r,la",                         "bge %1,$r0,%%b16(%2)",         0, 0, 0 },
+  { 0x0,       0x0,            "blez",         "r,la",                         "bge $r0,%1,%%b16(%2)",         0, 0, 0 },
+  { 0x0,       0x0,            "bgtu",         "r,r,la",                       "bltu %2,%1,%%b16(%3)",         0, 0, 0 },
+  { 0x0,       0x0,            "bleu",         "r,r,la",                       "bgeu %2,%1,%%b16(%3)",         0, 0, 0 },
+  { 0x0,       0x0,            "jr",           "r",                            "jirl $r0,%1,0",                0, 0, 0 },
   { 0 } /* Terminate the list.  */
 };