[v4,4/5] LoongArch: TLS LD/GD/DESC relaxation

Message ID 20231215101127.2536311-5-cailulu@loongson.cn
State New
Headers
Series Add support for TLS Descriptors (TLSDESC) |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_binutils_build--master-arm success Testing passed
linaro-tcwg-bot/tcwg_binutils_build--master-aarch64 success Testing passed
linaro-tcwg-bot/tcwg_binutils_check--master-aarch64 success Testing passed
linaro-tcwg-bot/tcwg_binutils_check--master-arm success Testing passed

Commit Message

Lulu Cai Dec. 15, 2023, 10:11 a.m. UTC
  From: mengqinggang <mengqinggang@loongson.cn>

---
 bfd/bfd-in2.h                                 |   3 +
 bfd/elfnn-loongarch.c                         | 177 +++++++-
 bfd/elfxx-loongarch.c                         |  54 +++
 bfd/libbfd.h                                  |   3 +
 bfd/reloc.c                                   |   7 +
 gas/config/tc-loongarch.c                     |   6 +-
 gas/testsuite/gas/loongarch/macro_op.d        | 128 +++---
 gas/testsuite/gas/loongarch/macro_op_32.d     | 120 +++---
 .../gas/loongarch/macro_op_large_abs.d        | 160 +++----
 .../gas/loongarch/macro_op_large_pc.d         | 160 +++----
 include/elf/loongarch.h                       |   4 +
 ld/testsuite/ld-loongarch-elf/macro_op.d      | 391 +++++++++---------
 ld/testsuite/ld-loongarch-elf/macro_op_32.d   | 120 +++---
 13 files changed, 789 insertions(+), 544 deletions(-)
  

Patch

diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index d3557a4fd74..6d666ac2b1c 100644
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -7472,6 +7472,9 @@  enum bfd_reloc_code_real
   BFD_RELOC_LARCH_TLS_DESC64_LO20,
   BFD_RELOC_LARCH_TLS_DESC64_HI12,
   BFD_RELOC_LARCH_TLS_DESC_CALL,
+  BFD_RELOC_LARCH_TLS_LD_PCREL20_S2,
+  BFD_RELOC_LARCH_TLS_GD_PCREL20_S2,
+  BFD_RELOC_LARCH_TLS_DESC_PCREL20_S2,
   BFD_RELOC_UNUSED
 };
 typedef enum bfd_reloc_code_real bfd_reloc_code_real_type;
diff --git a/bfd/elfnn-loongarch.c b/bfd/elfnn-loongarch.c
index ad94a2a7835..5317c5e140d 100644
--- a/bfd/elfnn-loongarch.c
+++ b/bfd/elfnn-loongarch.c
@@ -2279,7 +2279,9 @@  perform_relocation (const Elf_Internal_Rela *rel, asection *input_section,
     case R_LARCH_TLS_DESC_LO12:
     case R_LARCH_TLS_DESC64_LO20:
     case R_LARCH_TLS_DESC64_HI12:
-
+    case R_LARCH_TLS_LD_PCREL20_S2:
+    case R_LARCH_TLS_GD_PCREL20_S2:
+    case R_LARCH_TLS_DESC_PCREL20_S2:
       r = loongarch_check_offset (rel, input_section);
       if (r != bfd_reloc_ok)
 	break;
@@ -3667,6 +3669,9 @@  loongarch_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 	case R_LARCH_TLS_GD_HI20:
 	case R_LARCH_TLS_DESC_PC_HI20:
 	case R_LARCH_TLS_DESC_HI20:
+	case R_LARCH_TLS_LD_PCREL20_S2:
+	case R_LARCH_TLS_GD_PCREL20_S2:
+	case R_LARCH_TLS_DESC_PCREL20_S2:
 	  BFD_ASSERT (rel->r_addend == 0);
 	  unresolved_reloc = false;
 
@@ -3675,7 +3680,8 @@  loongarch_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 	    is_ie = true;
 
 	  if (r_type == R_LARCH_TLS_DESC_PC_HI20
-	      || r_type == R_LARCH_TLS_DESC_HI20)
+	      || r_type == R_LARCH_TLS_DESC_HI20
+	      || r_type == R_LARCH_TLS_DESC_PCREL20_S2)
 	    is_desc = true;
 
 	  bfd_vma got_off = 0;
@@ -3806,7 +3812,11 @@  loongarch_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 	      || r_type == R_LARCH_TLS_IE_PC_HI20
 	      || r_type == R_LARCH_TLS_DESC_PC_HI20)
 	    RELOCATE_CALC_PC32_HI20 (relocation, pc);
-
+	  else if (r_type == R_LARCH_TLS_LD_PCREL20_S2
+	      || r_type == R_LARCH_TLS_GD_PCREL20_S2
+	      || r_type == R_LARCH_TLS_DESC_PCREL20_S2)
+	    relocation -= pc;
+	  /*else {} ABS relocations.  */
 	  break;
 
 	case R_LARCH_TLS_DESC_ADD_PC_LO12:
@@ -4228,6 +4238,84 @@  loongarch_relax_align (bfd *abfd, asection *sec,
 				   rel->r_addend - nop_bytes, link_info);
 }
 
+static bool
+loongarch_relax_tls_ld_gd_desc (bfd *abfd, asection *sec, asection *sym_sec,
+		       Elf_Internal_Rela *rel_hi, bfd_vma symval,
+		       struct bfd_link_info *info, bool *again)
+{
+  bfd_byte *contents = elf_section_data (sec)->this_hdr.contents;
+  Elf_Internal_Rela *rel_lo = rel_hi + 2;
+  uint32_t pca = bfd_get (32, abfd, contents + rel_hi->r_offset);
+  uint32_t add = bfd_get (32, abfd, contents + rel_lo->r_offset);
+  uint32_t rd = pca & 0x1f;
+
+  /* This section's output_offset need to subtract the bytes of instructions
+     relaxed by the previous sections, so it needs to be updated beforehand.
+     size_input_section already took care of updating it after relaxation,
+     so we additionally update once here.  */
+  sec->output_offset = sec->output_section->size;
+  bfd_vma pc = sec_addr (sec) + rel_hi->r_offset;
+
+  /* If pc and symbol not in the same segment, add/sub segment alignment.
+     FIXME: if there are multiple readonly segments?  */
+  if (!(sym_sec->flags & SEC_READONLY))
+    {
+      if (symval > pc)
+	pc -= info->maxpagesize;
+      else if (symval < pc)
+	pc += info->maxpagesize;
+    }
+
+  const uint32_t addi_d = 0x02c00000;
+  const uint32_t pcaddi = 0x18000000;
+
+  /* Is pcalau12i + addi.d insns?  */
+  if ((ELFNN_R_TYPE (rel_lo->r_info) != R_LARCH_GOT_PC_LO12
+	&& ELFNN_R_TYPE (rel_lo->r_info) != R_LARCH_TLS_DESC_ADD_PC_LO12)
+      || (ELFNN_R_TYPE ((rel_lo + 1)->r_info) != R_LARCH_RELAX)
+      || (ELFNN_R_TYPE ((rel_hi + 1)->r_info) != R_LARCH_RELAX)
+      || (rel_hi->r_offset + 4 != rel_lo->r_offset)
+      || ((add & addi_d) != addi_d)
+      /* Is pcalau12i $rd + addi.d $rd,$rd?  */
+      || ((add & 0x1f) != rd)
+      || (((add >> 5) & 0x1f) != rd)
+      /* Can be relaxed to pcaddi?  */
+      || (symval & 0x3) /* 4 bytes align.  */
+      || ((bfd_signed_vma)(symval - pc) < (bfd_signed_vma)(int32_t)0xffe00000)
+      || ((bfd_signed_vma)(symval - pc) > (bfd_signed_vma)(int32_t)0x1ffffc))
+    return false;
+
+  /* Continue next relax trip.  */
+  *again = true;
+
+  pca = pcaddi | rd;
+  bfd_put (32, abfd, pca, contents + rel_hi->r_offset);
+
+  /* Adjust relocations.  */
+  switch (ELFNN_R_TYPE (rel_hi->r_info))
+    {
+    case R_LARCH_TLS_LD_PC_HI20:
+      rel_hi->r_info = ELFNN_R_INFO (ELFNN_R_SYM (rel_hi->r_info),
+				      R_LARCH_TLS_LD_PCREL20_S2);
+      break;
+    case R_LARCH_TLS_GD_PC_HI20:
+      rel_hi->r_info = ELFNN_R_INFO (ELFNN_R_SYM (rel_hi->r_info),
+				      R_LARCH_TLS_GD_PCREL20_S2);
+      break;
+    case R_LARCH_TLS_DESC_PC_HI20:
+      rel_hi->r_info = ELFNN_R_INFO (ELFNN_R_SYM (rel_hi->r_info),
+				      R_LARCH_TLS_DESC_PCREL20_S2);
+      break;
+    default:
+      break;
+    }
+  rel_lo->r_info = ELFNN_R_INFO (0, R_LARCH_NONE);
+
+  loongarch_relax_delete_bytes (abfd, sec, rel_lo->r_offset, 4, info);
+
+  return true;
+}
+
 static bool
 loongarch_elf_relax_section (bfd *abfd, asection *sec,
 			       struct bfd_link_info *info,
@@ -4268,18 +4356,27 @@  loongarch_elf_relax_section (bfd *abfd, asection *sec,
 						   0, NULL, NULL, NULL)))
     return true;
 
-      data->relocs = relocs;
+  data->relocs = relocs;
 
   for (unsigned int i = 0; i < sec->reloc_count; i++)
     {
-      Elf_Internal_Rela *rel = relocs + i;
-      asection *sym_sec;
+      char symtype;
       bfd_vma symval;
-      unsigned long r_symndx = ELFNN_R_SYM (rel->r_info);
+      asection *sym_sec;
       bool local_got = false;
-      char symtype;
+      Elf_Internal_Rela *rel = relocs + i;
       struct elf_link_hash_entry *h = NULL;
+      unsigned long r_type = ELFNN_R_TYPE (rel->r_info);
+      unsigned long r_symndx = ELFNN_R_SYM (rel->r_info);
 
+      /* Three kind of relocations:
+	 Normal: symval is the symbol address.
+	 R_LARCH_ALIGN: symval is the address of the last NOP instruction
+	 added by this relocation, and then adds 4 more.
+	 R_LARCH_CALL36: symval is the symbol address for local symbols,
+	 or the PLT entry address of the symbol. (Todo)
+	 R_LARCHL_TLS_LD/GD/DESC_PC_HI20: symval is the GOT entry address
+	 of the symbol.  */
       if (r_symndx < symtab_hdr->sh_info)
 	{
 	  Elf_Internal_Sym *sym = (Elf_Internal_Sym *)symtab_hdr->contents
@@ -4287,6 +4384,7 @@  loongarch_elf_relax_section (bfd *abfd, asection *sec,
 	  if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
 	    continue;
 
+	  /* For R_LARCH_ALIGN?  */
 	  if (sym->st_shndx == SHN_UNDEF)
 	    {
 	      sym_sec = sec;
@@ -4312,10 +4410,21 @@  loongarch_elf_relax_section (bfd *abfd, asection *sec,
 	  if (h != NULL && h->type == STT_GNU_IFUNC)
 	    continue;
 
-	  if ((h->root.type == bfd_link_hash_defined
-		    || h->root.type == bfd_link_hash_defweak)
-		   && h->root.u.def.section != NULL
-		   && h->root.u.def.section->output_section != NULL)
+	  /* For TLS LD/GD/DESC relocations, the got entry of the symbol
+	     is in current module. */
+	  if (R_LARCH_TLS_LD_PC_HI20 == r_type
+	      || R_LARCH_TLS_GD_PC_HI20 == r_type
+	      || R_LARCH_TLS_DESC_PC_HI20 == r_type)
+	    {
+	      if (loongarch_can_relax_tls (info, r_type, h, abfd, r_symndx))
+		continue;
+	      else
+		goto tls_got_relax;
+	    }
+	  else if ((h->root.type == bfd_link_hash_defined
+		  || h->root.type == bfd_link_hash_defweak)
+		&& h->root.u.def.section != NULL
+		&& h->root.u.def.section->output_section != NULL)
 	    {
 	      symval = h->root.u.def.value;
 	      sym_sec = h->root.u.def.section;
@@ -4347,7 +4456,28 @@  loongarch_elf_relax_section (bfd *abfd, asection *sec,
 
       symval += sec_addr (sym_sec);
 
-      switch (ELFNN_R_TYPE (rel->r_info))
+      /* For TLS LD/GD/DESC relocations, symval is the got entry
+	 address of the symbol.  */
+tls_got_relax:
+      if (R_LARCH_TLS_LD_PC_HI20 == r_type
+	  || R_LARCH_TLS_GD_PC_HI20 == r_type
+	  || R_LARCH_TLS_DESC_PC_HI20 == r_type)
+	{
+	  bfd_vma got_off = 0;
+	  if (h != NULL)
+	    got_off = h->got.offset;
+	  else
+	    got_off = elf_local_got_offsets (abfd)[r_symndx];
+	  symval = sec_addr (htab->elf.sgot) + got_off;
+	  sym_sec = htab->elf.sgot;
+
+	  char tls_type = _bfd_loongarch_elf_tls_type (abfd, h, r_symndx);
+	  if (R_LARCH_TLS_DESC_PC_HI20 == r_type
+	      && GOT_TLS_GD_BOTH_P (tls_type))
+	    symval += 2 * GOT_ENTRY_SIZE;
+	}
+
+      switch (r_type)
 	{
 	case R_LARCH_ALIGN:
 	  if (1 == info->relax_pass)
@@ -4374,6 +4504,27 @@  loongarch_elf_relax_section (bfd *abfd, asection *sec,
 					    info, again);
 	    }
 	  break;
+
+	case R_LARCH_TLS_LD_PC_HI20:
+	  if (0 == info->relax_pass && (i + 4) <= sec->reloc_count)
+	    loongarch_relax_tls_ld_gd_desc (abfd, sec, sym_sec, rel, symval,
+					    info, again);
+	  break;
+
+	case R_LARCH_TLS_GD_PC_HI20:
+	  if (0 == info->relax_pass && (i + 4) <= sec->reloc_count)
+	    loongarch_relax_tls_ld_gd_desc (abfd, sec, sym_sec, rel, symval,
+					    info, again);
+	  break;
+
+	case R_LARCH_TLS_DESC_PC_HI20:
+	  if (0 == info->relax_pass
+	      && (i + 4) <= sec->reloc_count
+	      && !loongarch_can_relax_tls (info, r_type, h, abfd, r_symndx))
+	    loongarch_relax_tls_ld_gd_desc (abfd, sec, sym_sec, rel, symval,
+					    info, again);
+	  break;
+
 	default:
 	  break;
 	}
diff --git a/bfd/elfxx-loongarch.c b/bfd/elfxx-loongarch.c
index 819c4849ef5..ab930e58aec 100644
--- a/bfd/elfxx-loongarch.c
+++ b/bfd/elfxx-loongarch.c
@@ -1754,6 +1754,60 @@  static loongarch_reloc_howto_type loongarch_howto_table[] =
 	 BFD_RELOC_LARCH_TLS_DESC_CALL,		/* bfd_reloc_code_real_type.  */
 	 NULL,					/* adjust_reloc_bits.  */
 	 "desc_call"),				/* larch_reloc_type_name.  */
+
+  /* For pcaddi, ld_pc_hi20 + ld_pc_lo12 can relax to ld_pcrel20_s2.  */
+  LOONGARCH_HOWTO (R_LARCH_TLS_LD_PCREL20_S2,	/* type (121).  */
+	 2,					/* rightshift.  */
+	 4,					/* size.  */
+	 20,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 5,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_LD_PCREL20_S2",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0x1ffffe0,				/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_TLS_LD_PCREL20_S2,	/* bfd_reloc_code_real_type.  */
+	 reloc_sign_bits,			/* adjust_reloc_bits.  */
+	 "ld_pcrel_20"),			/* larch_reloc_type_name.  */
+
+  /* For pcaddi, gd_pc_hi20 + gd_pc_lo12 can relax to gd_pcrel20_s2.  */
+  LOONGARCH_HOWTO (R_LARCH_TLS_GD_PCREL20_S2,	/* type (122).  */
+	 2,					/* rightshift.  */
+	 4,					/* size.  */
+	 20,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 5,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_GD_PCREL20_S2",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0x1ffffe0,				/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_TLS_GD_PCREL20_S2,	/* bfd_reloc_code_real_type.  */
+	 reloc_sign_bits,			/* adjust_reloc_bits.  */
+	 "gd_pcrel_20"),			/* larch_reloc_type_name.  */
+
+  /* For pcaddi, desc_pc_hi20 + desc_pc_lo12 can relax to desc_pcrel20_s2.  */
+  LOONGARCH_HOWTO (R_LARCH_TLS_DESC_PCREL20_S2,	/* type (123).  */
+	 2,					/* rightshift.  */
+	 4,					/* size.  */
+	 20,					/* bitsize.  */
+	 false,					/* pc_relative.  */
+	 5,					/* bitpos.  */
+	 complain_overflow_signed,		/* complain_on_overflow.  */
+	 bfd_elf_generic_reloc,			/* special_function.  */
+	 "R_LARCH_TLS_DESC_PCREL20_S2",		/* name.  */
+	 false,					/* partial_inplace.  */
+	 0,					/* src_mask.  */
+	 0x1ffffe0,				/* dst_mask.  */
+	 false,					/* pcrel_offset.  */
+	 BFD_RELOC_LARCH_TLS_DESC_PCREL20_S2,	/* bfd_reloc_code_real_type.  */
+	 reloc_sign_bits,			/* adjust_reloc_bits.  */
+	 "desc_pcrel_20"),			/* larch_reloc_type_name.  */
 };
 
 reloc_howto_type *
diff --git a/bfd/libbfd.h b/bfd/libbfd.h
index 6ee021e84b5..6151eec50a2 100644
--- a/bfd/libbfd.h
+++ b/bfd/libbfd.h
@@ -3611,6 +3611,9 @@  static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_LARCH_TLS_DESC64_LO20",
   "BFD_RELOC_LARCH_TLS_DESC64_HI12",
   "BFD_RELOC_LARCH_TLS_DESC_CALL",
+  "BFD_RELOC_LARCH_TLS_LD_PCREL20_S2",
+  "BFD_RELOC_LARCH_TLS_GD_PCREL20_S2",
+  "BFD_RELOC_LARCH_TLS_DESC_PCREL20_S2",
  "@@overflow: BFD_RELOC_UNUSED@@",
 };
 #endif
diff --git a/bfd/reloc.c b/bfd/reloc.c
index 0e354ef4b80..aa0575ad839 100644
--- a/bfd/reloc.c
+++ b/bfd/reloc.c
@@ -8321,6 +8321,13 @@  ENUMX
 ENUMX
   BFD_RELOC_LARCH_TLS_DESC_CALL
 
+ENUMX
+  BFD_RELOC_LARCH_TLS_LD_PCREL20_S2
+ENUMX
+  BFD_RELOC_LARCH_TLS_GD_PCREL20_S2
+ENUMX
+  BFD_RELOC_LARCH_TLS_DESC_PCREL20_S2
+
 ENUMDOC
   LARCH relocations.
 
diff --git a/gas/config/tc-loongarch.c b/gas/config/tc-loongarch.c
index e1d5453b14f..a14c23fb45b 100644
--- a/gas/config/tc-loongarch.c
+++ b/gas/config/tc-loongarch.c
@@ -694,7 +694,11 @@  loongarch_args_parser_can_match_arg_helper (char esc_ch1, char esc_ch2,
 		    && (BFD_RELOC_LARCH_PCALA_HI20 == reloc_type
 			|| BFD_RELOC_LARCH_PCALA_LO12 == reloc_type
 			|| BFD_RELOC_LARCH_GOT_PC_HI20 == reloc_type
-			|| BFD_RELOC_LARCH_GOT_PC_LO12 == reloc_type))
+			|| BFD_RELOC_LARCH_GOT_PC_LO12 == reloc_type
+			|| BFD_RELOC_LARCH_TLS_LD_PC_HI20 == reloc_type
+			|| BFD_RELOC_LARCH_TLS_GD_PC_HI20 == reloc_type
+			|| BFD_RELOC_LARCH_TLS_DESC_PC_HI20 == reloc_type
+			|| BFD_RELOC_LARCH_TLS_DESC_ADD_PC_LO12 == reloc_type))
 		{
 		  ip->reloc_info[ip->reloc_num].type = BFD_RELOC_LARCH_RELAX;
 		  ip->reloc_info[ip->reloc_num].value = const_0;
diff --git a/gas/testsuite/gas/loongarch/macro_op.d b/gas/testsuite/gas/loongarch/macro_op.d
index 32860864704..47f8f45c663 100644
--- a/gas/testsuite/gas/loongarch/macro_op.d
+++ b/gas/testsuite/gas/loongarch/macro_op.d
@@ -2,70 +2,72 @@ 
 #objdump: -dr
 #skip: loongarch32-*-*
 
-.*:[    ]+file format .*
+.*:     file format .*
 
 
 Disassembly of section .text:
 
-00000000.* <.text>:
-[ 	]+0:[ 	]+00150004[ 	]+move[ 	]+\$a0,[ 	]+\$zero
-[ 	]+4:[ 	]+02bffc04[ 	]+li\.w[ 	]+\$a0,[ 	]+-1
-[ 	]+8:[ 	]+00150004[ 	]+move[ 	]+\$a0,[ 	]+\$zero
-[ 	]+c:[ 	]+02bffc04[ 	]+li\.w[ 	]+\$a0,[ 	]+-1
-[ 	]+10:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+10:[ 	]+R_LARCH_GOT_PC_HI20[ 	]+\.L1
-[ 	]+10:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+14:[ 	]+28c00084[ 	]+ld\.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+14:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+\.L1
-[ 	]+14:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+18:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+18:[ 	]+R_LARCH_GOT_PC_HI20[ 	]+\.L1
-[ 	]+18:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+1c:[ 	]+28c00084[ 	]+ld\.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+1c:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+\.L1
-[ 	]+1c:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+20:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+20:[ 	]+R_LARCH_PCALA_HI20[ 	]+\.L1
-[ 	]+20:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+24:[ 	]+02c00084[ 	]+addi\.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+24:[ 	]+R_LARCH_PCALA_LO12[ 	]+\.L1
-[ 	]+24:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+28:[ 	]+14000004[ 	]+lu12i\.w[ 	]+\$a0,[ 	]+0
-[ 	]+28:[ 	]+R_LARCH_MARK_LA[ 	]+\*ABS\*
-[ 	]+28:[ 	]+R_LARCH_ABS_HI20[ 	]+\.L1
-[ 	]+2c:[ 	]+03800084[ 	]+ori[ 	]+\$a0,[ 	]+\$a0,[ 	]+0x0
-[ 	]+2c:[ 	]+R_LARCH_ABS_LO12[ 	]+\.L1
-[ 	]+30:[ 	]+16000004[ 	]+lu32i\.d[ 	]+\$a0,[ 	]+0
-[ 	]+30:[ 	]+R_LARCH_ABS64_LO20[ 	]+\.L1
-[ 	]+34:[ 	]+03000084[ 	]+lu52i\.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+34:[ 	]+R_LARCH_ABS64_HI12[ 	]+\.L1
-[ 	]+38:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+38:[ 	]+R_LARCH_PCALA_HI20[ 	]+\.L1
-[ 	]+38:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+3c:[ 	]+02c00084[ 	]+addi\.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+3c:[ 	]+R_LARCH_PCALA_LO12[ 	]+\.L1
-[ 	]+3c:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+40:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+40:[ 	]+R_LARCH_GOT_PC_HI20[ 	]+\.L1
-[ 	]+40:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+44:[ 	]+28c00084[ 	]+ld\.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+44:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+\.L1
-[ 	]+44:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+48:[ 	]+14000004[ 	]+lu12i\.w[ 	]+\$a0,[ 	]+0
-[ 	]+48:[ 	]+R_LARCH_TLS_LE_HI20[ 	]+TLS1
-[ 	]+4c:[ 	]+03800084[ 	]+ori[ 	]+\$a0,[ 	]+\$a0,[ 	]+0x0
-[ 	]+4c:[ 	]+R_LARCH_TLS_LE_LO12[ 	]+TLS1
-[ 	]+50:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+50:[ 	]+R_LARCH_TLS_IE_PC_HI20[ 	]+TLS1
-[ 	]+54:[ 	]+28c00084[ 	]+ld\.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+54:[ 	]+R_LARCH_TLS_IE_PC_LO12[ 	]+TLS1
-[ 	]+58:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+58:[ 	]+R_LARCH_TLS_LD_PC_HI20[ 	]+TLS1
-[ 	]+5c:[ 	]+02c00084[ 	]+addi\.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+5c:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+TLS1
-[ 	]+5c:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+60:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+60:[ 	]+R_LARCH_TLS_GD_PC_HI20[ 	]+TLS1
-[ 	]+64:[ 	]+02c00084[ 	]+addi\.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+64:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+TLS1
-[ 	]+64:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
+0+ <.*>:
+   0:	00150004 	move        	\$a0, \$zero
+   4:	02bffc04 	li.w        	\$a0, -1
+   8:	00150004 	move        	\$a0, \$zero
+   c:	02bffc04 	li.w        	\$a0, -1
+  10:	1a000004 	pcalau12i   	\$a0, 0
+			10: R_LARCH_GOT_PC_HI20	.L1
+			10: R_LARCH_RELAX	\*ABS\*
+  14:	28c00084 	ld.d        	\$a0, \$a0, 0
+			14: R_LARCH_GOT_PC_LO12	.L1
+			14: R_LARCH_RELAX	\*ABS\*
+  18:	1a000004 	pcalau12i   	\$a0, 0
+			18: R_LARCH_GOT_PC_HI20	.L1
+			18: R_LARCH_RELAX	\*ABS\*
+  1c:	28c00084 	ld.d        	\$a0, \$a0, 0
+			1c: R_LARCH_GOT_PC_LO12	.L1
+			1c: R_LARCH_RELAX	\*ABS\*
+  20:	1a000004 	pcalau12i   	\$a0, 0
+			20: R_LARCH_PCALA_HI20	.L1
+			20: R_LARCH_RELAX	\*ABS\*
+  24:	02c00084 	addi.d      	\$a0, \$a0, 0
+			24: R_LARCH_PCALA_LO12	.L1
+			24: R_LARCH_RELAX	\*ABS\*
+  28:	14000004 	lu12i.w     	\$a0, 0
+			28: R_LARCH_MARK_LA	\*ABS\*
+			28: R_LARCH_ABS_HI20	.L1
+  2c:	03800084 	ori         	\$a0, \$a0, 0x0
+			2c: R_LARCH_ABS_LO12	.L1
+  30:	16000004 	lu32i.d     	\$a0, 0
+			30: R_LARCH_ABS64_LO20	.L1
+  34:	03000084 	lu52i.d     	\$a0, \$a0, 0
+			34: R_LARCH_ABS64_HI12	.L1
+  38:	1a000004 	pcalau12i   	\$a0, 0
+			38: R_LARCH_PCALA_HI20	.L1
+			38: R_LARCH_RELAX	\*ABS\*
+  3c:	02c00084 	addi.d      	\$a0, \$a0, 0
+			3c: R_LARCH_PCALA_LO12	.L1
+			3c: R_LARCH_RELAX	\*ABS\*
+  40:	1a000004 	pcalau12i   	\$a0, 0
+			40: R_LARCH_GOT_PC_HI20	.L1
+			40: R_LARCH_RELAX	\*ABS\*
+  44:	28c00084 	ld.d        	\$a0, \$a0, 0
+			44: R_LARCH_GOT_PC_LO12	.L1
+			44: R_LARCH_RELAX	\*ABS\*
+  48:	14000004 	lu12i.w     	\$a0, 0
+			48: R_LARCH_TLS_LE_HI20	TLS1
+  4c:	03800084 	ori         	\$a0, \$a0, 0x0
+			4c: R_LARCH_TLS_LE_LO12	TLS1
+  50:	1a000004 	pcalau12i   	\$a0, 0
+			50: R_LARCH_TLS_IE_PC_HI20	TLS1
+  54:	28c00084 	ld.d        	\$a0, \$a0, 0
+			54: R_LARCH_TLS_IE_PC_LO12	TLS1
+  58:	1a000004 	pcalau12i   	\$a0, 0
+			58: R_LARCH_TLS_LD_PC_HI20	TLS1
+			58: R_LARCH_RELAX	\*ABS\*
+  5c:	02c00084 	addi.d      	\$a0, \$a0, 0
+			5c: R_LARCH_GOT_PC_LO12	TLS1
+			5c: R_LARCH_RELAX	\*ABS\*
+  60:	1a000004 	pcalau12i   	\$a0, 0
+			60: R_LARCH_TLS_GD_PC_HI20	TLS1
+			60: R_LARCH_RELAX	\*ABS\*
+  64:	02c00084 	addi.d      	\$a0, \$a0, 0
+			64: R_LARCH_GOT_PC_LO12	TLS1
+			64: R_LARCH_RELAX	\*ABS\*
diff --git a/gas/testsuite/gas/loongarch/macro_op_32.d b/gas/testsuite/gas/loongarch/macro_op_32.d
index 188026a5780..a7349aa8dc0 100644
--- a/gas/testsuite/gas/loongarch/macro_op_32.d
+++ b/gas/testsuite/gas/loongarch/macro_op_32.d
@@ -2,66 +2,68 @@ 
 #objdump: -dr
 #skip: loongarch64-*-*
 
-.*:[    ]+file format .*
+.*:     file format .*
 
 
 Disassembly of section .text:
 
-00000000.* <.L1>:
-[ 	]+0:[ 	]+00150004[ 	]+move[ 	]+\$a0,[ 	]+\$zero
-[ 	]+4:[ 	]+02bffc04[ 	]+li\.w[ 	]+\$a0,[ 	]+-1
-[ 	]+8:[ 	]+00150004[ 	]+move[ 	]+\$a0,[ 	]+\$zero
-[ 	]+c:[ 	]+02bffc04[ 	]+li\.w[ 	]+\$a0,[ 	]+-1
-[ 	]+10:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+10:[ 	]+R_LARCH_GOT_PC_HI20[ 	]+.L1
-[ 	]+10:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+14:[ 	]+28800084[ 	]+ld.w[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+14:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+.L1
-[ 	]+14:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+18:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+18:[ 	]+R_LARCH_GOT_PC_HI20[ 	]+.L1
-[ 	]+18:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+1c:[ 	]+28800084[ 	]+ld.w[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+1c:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+.L1
-[ 	]+1c:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+20:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+20:[ 	]+R_LARCH_PCALA_HI20[ 	]+.L1
-[ 	]+20:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+24:[ 	]+02800084[ 	]+addi.w[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+24:[ 	]+R_LARCH_PCALA_LO12[ 	]+.L1
-[ 	]+24:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+28:[ 	]+14000004[ 	]+lu12i.w[ 	]+\$a0,[ 	]+0
-[ 	]+28:[ 	]+R_LARCH_MARK_LA[ 	]+\*ABS\*
-[ 	]+28:[ 	]+R_LARCH_ABS_HI20[ 	]+.L1
-[ 	]+2c:[ 	]+03800084[ 	]+ori[ 	]+\$a0,[ 	]+\$a0,[ 	]+0x0
-[ 	]+2c:[ 	]+R_LARCH_ABS_LO12[ 	]+.L1
-[ 	]+30:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+30:[ 	]+R_LARCH_PCALA_HI20[ 	]+.L1
-[ 	]+30:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+34:[ 	]+02800084[ 	]+addi.w[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+34:[ 	]+R_LARCH_PCALA_LO12[ 	]+.L1
-[ 	]+34:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+38:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+38:[ 	]+R_LARCH_GOT_PC_HI20[ 	]+.L1
-[ 	]+38:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+3c:[ 	]+28800084[ 	]+ld.w[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+3c:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+.L1
-[ 	]+3c:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+40:[ 	]+14000004[ 	]+lu12i.w[ 	]+\$a0,[ 	]+0
-[ 	]+40:[ 	]+R_LARCH_TLS_LE_HI20[ 	]+TLS1
-[ 	]+44:[ 	]+03800084[ 	]+ori[ 	]+\$a0,[ 	]+\$a0,[ 	]+0x0
-[ 	]+44:[ 	]+R_LARCH_TLS_LE_LO12[ 	]+TLS1
-[ 	]+48:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+48:[ 	]+R_LARCH_TLS_IE_PC_HI20[ 	]+TLS1
-[ 	]+4c:[ 	]+28800084[ 	]+ld.w[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+4c:[ 	]+R_LARCH_TLS_IE_PC_LO12[ 	]+TLS1
-[ 	]+50:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+50:[ 	]+R_LARCH_TLS_LD_PC_HI20[ 	]+TLS1
-[ 	]+54:[ 	]+02800084[ 	]+addi.w[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+54:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+TLS1
-[ 	]+54:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+58:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+58:[ 	]+R_LARCH_TLS_GD_PC_HI20[ 	]+TLS1
-[ 	]+5c:[ 	]+02800084[ 	]+addi.w[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+5c:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+TLS1
-[ 	]+5c:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
+0+ <.L1>:
+   0:	00150004 	move        	\$a0, \$zero
+   4:	02bffc04 	li.w        	\$a0, -1
+   8:	00150004 	move        	\$a0, \$zero
+   c:	02bffc04 	li.w        	\$a0, -1
+  10:	1a000004 	pcalau12i   	\$a0, 0
+			10: R_LARCH_GOT_PC_HI20	.L1
+			10: R_LARCH_RELAX	\*ABS\*
+  14:	28800084 	ld.w        	\$a0, \$a0, 0
+			14: R_LARCH_GOT_PC_LO12	.L1
+			14: R_LARCH_RELAX	\*ABS\*
+  18:	1a000004 	pcalau12i   	\$a0, 0
+			18: R_LARCH_GOT_PC_HI20	.L1
+			18: R_LARCH_RELAX	\*ABS\*
+  1c:	28800084 	ld.w        	\$a0, \$a0, 0
+			1c: R_LARCH_GOT_PC_LO12	.L1
+			1c: R_LARCH_RELAX	\*ABS\*
+  20:	1a000004 	pcalau12i   	\$a0, 0
+			20: R_LARCH_PCALA_HI20	.L1
+			20: R_LARCH_RELAX	\*ABS\*
+  24:	02800084 	addi.w      	\$a0, \$a0, 0
+			24: R_LARCH_PCALA_LO12	.L1
+			24: R_LARCH_RELAX	\*ABS\*
+  28:	14000004 	lu12i.w     	\$a0, 0
+			28: R_LARCH_MARK_LA	\*ABS\*
+			28: R_LARCH_ABS_HI20	.L1
+  2c:	03800084 	ori         	\$a0, \$a0, 0x0
+			2c: R_LARCH_ABS_LO12	.L1
+  30:	1a000004 	pcalau12i   	\$a0, 0
+			30: R_LARCH_PCALA_HI20	.L1
+			30: R_LARCH_RELAX	\*ABS\*
+  34:	02800084 	addi.w      	\$a0, \$a0, 0
+			34: R_LARCH_PCALA_LO12	.L1
+			34: R_LARCH_RELAX	\*ABS\*
+  38:	1a000004 	pcalau12i   	\$a0, 0
+			38: R_LARCH_GOT_PC_HI20	.L1
+			38: R_LARCH_RELAX	\*ABS\*
+  3c:	28800084 	ld.w        	\$a0, \$a0, 0
+			3c: R_LARCH_GOT_PC_LO12	.L1
+			3c: R_LARCH_RELAX	\*ABS\*
+  40:	14000004 	lu12i.w     	\$a0, 0
+			40: R_LARCH_TLS_LE_HI20	TLS1
+  44:	03800084 	ori         	\$a0, \$a0, 0x0
+			44: R_LARCH_TLS_LE_LO12	TLS1
+  48:	1a000004 	pcalau12i   	\$a0, 0
+			48: R_LARCH_TLS_IE_PC_HI20	TLS1
+  4c:	28800084 	ld.w        	\$a0, \$a0, 0
+			4c: R_LARCH_TLS_IE_PC_LO12	TLS1
+  50:	1a000004 	pcalau12i   	\$a0, 0
+			50: R_LARCH_TLS_LD_PC_HI20	TLS1
+			50: R_LARCH_RELAX	\*ABS\*
+  54:	02800084 	addi.w      	\$a0, \$a0, 0
+			54: R_LARCH_GOT_PC_LO12	TLS1
+			54: R_LARCH_RELAX	\*ABS\*
+  58:	1a000004 	pcalau12i   	\$a0, 0
+			58: R_LARCH_TLS_GD_PC_HI20	TLS1
+			58: R_LARCH_RELAX	\*ABS\*
+  5c:	02800084 	addi.w      	\$a0, \$a0, 0
+			5c: R_LARCH_GOT_PC_LO12	TLS1
+			5c: R_LARCH_RELAX	\*ABS\*
diff --git a/gas/testsuite/gas/loongarch/macro_op_large_abs.d b/gas/testsuite/gas/loongarch/macro_op_large_abs.d
index 0c49f68e2ab..729e878ffb8 100644
--- a/gas/testsuite/gas/loongarch/macro_op_large_abs.d
+++ b/gas/testsuite/gas/loongarch/macro_op_large_abs.d
@@ -1,85 +1,89 @@ 
-#as: -mla-global-with-abs
+#as:
 #objdump: -dr
 #skip: loongarch32-*-*
 
-.*:[    ]+file format .*
+.*:     file format .*
 
 
 Disassembly of section .text:
 
-00000000.* <.L1>:
-[ 	]+0:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+0:[ 	]+R_LARCH_PCALA_HI20[ 	]+.L1
-[ 	]+0:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+4:[ 	]+02c00005[ 	]+li\.d[ 	]+\$a1,[ 	]+0
-[ 	]+4:[ 	]+R_LARCH_PCALA_LO12[ 	]+.L1
-[ 	]+4:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+8:[ 	]+16000005[ 	]+lu32i.d[ 	]+\$a1,[ 	]+0
-[ 	]+8:[ 	]+R_LARCH_PCALA64_LO20[ 	]+.L1
-[ 	]+c:[ 	]+030000a5[ 	]+lu52i.d[ 	]+\$a1,[ 	]+\$a1,[ 	]+0
-[ 	]+c:[ 	]+R_LARCH_PCALA64_HI12[ 	]+.L1
-[ 	]+10:[ 	]+00109484[ 	]+add.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+\$a1
-[ 	]+14:[ 	]+14000004[ 	]+lu12i.w[ 	]+\$a0,[ 	]+0
-[ 	]+14:[ 	]+R_LARCH_MARK_LA[ 	]+\*ABS\*
-[ 	]+14:[ 	]+R_LARCH_ABS_HI20[ 	]+.L1
-[ 	]+18:[ 	]+03800084[ 	]+ori[ 	]+\$a0,[ 	]+\$a0,[ 	]+0x0
-[ 	]+18:[ 	]+R_LARCH_ABS_LO12[ 	]+.L1
-[ 	]+1c:[ 	]+16000004[ 	]+lu32i.d[ 	]+\$a0,[ 	]+0
-[ 	]+1c:[ 	]+R_LARCH_ABS64_LO20[ 	]+.L1
-[ 	]+20:[ 	]+03000084[ 	]+lu52i.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+20:[ 	]+R_LARCH_ABS64_HI12[ 	]+.L1
-[ 	]+24:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+24:[ 	]+R_LARCH_PCALA_HI20[ 	]+.L1
-[ 	]+24:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+28:[ 	]+02c00005[ 	]+li\.d[ 	]+\$a1,[ 	]+0
-[ 	]+28:[ 	]+R_LARCH_PCALA_LO12[ 	]+.L1
-[ 	]+28:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+2c:[ 	]+16000005[ 	]+lu32i.d[ 	]+\$a1,[ 	]+0
-[ 	]+2c:[ 	]+R_LARCH_PCALA64_LO20[ 	]+.L1
-[ 	]+30:[ 	]+030000a5[ 	]+lu52i.d[ 	]+\$a1,[ 	]+\$a1,[ 	]+0
-[ 	]+30:[ 	]+R_LARCH_PCALA64_HI12[ 	]+.L1
-[ 	]+34:[ 	]+00109484[ 	]+add.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+\$a1
-[ 	]+38:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+38:[ 	]+R_LARCH_GOT_PC_HI20[ 	]+.L1
-[ 	]+38:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+3c:[ 	]+02c00005[ 	]+li\.d[ 	]+\$a1,[ 	]+0
-[ 	]+3c:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+.L1
-[ 	]+3c:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+40:[ 	]+16000005[ 	]+lu32i.d[ 	]+\$a1,[ 	]+0
-[ 	]+40:[ 	]+R_LARCH_GOT64_PC_LO20[ 	]+.L1
-[ 	]+44:[ 	]+030000a5[ 	]+lu52i.d[ 	]+\$a1,[ 	]+\$a1,[ 	]+0
-[ 	]+44:[ 	]+R_LARCH_GOT64_PC_HI12[ 	]+.L1
-[ 	]+48:[ 	]+380c1484[ 	]+ldx.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+\$a1
-[ 	]+4c:[ 	]+14000004[ 	]+lu12i.w[ 	]+\$a0,[ 	]+0
-[ 	]+4c:[ 	]+R_LARCH_TLS_LE_HI20[ 	]+TLS1
-[ 	]+50:[ 	]+03800084[ 	]+ori[ 	]+\$a0,[ 	]+\$a0,[ 	]+0x0
-[ 	]+50:[ 	]+R_LARCH_TLS_LE_LO12[ 	]+TLS1
-[ 	]+54:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+54:[ 	]+R_LARCH_TLS_IE_PC_HI20[ 	]+TLS1
-[ 	]+58:[ 	]+02c00005[ 	]+li\.d[ 	]+\$a1,[ 	]+0
-[ 	]+58:[ 	]+R_LARCH_TLS_IE_PC_LO12[ 	]+TLS1
-[ 	]+5c:[ 	]+16000005[ 	]+lu32i.d[ 	]+\$a1,[ 	]+0
-[ 	]+5c:[ 	]+R_LARCH_TLS_IE64_PC_LO20[ 	]+TLS1
-[ 	]+60:[ 	]+030000a5[ 	]+lu52i.d[ 	]+\$a1,[ 	]+\$a1,[ 	]+0
-[ 	]+60:[ 	]+R_LARCH_TLS_IE64_PC_HI12[ 	]+TLS1
-[ 	]+64:[ 	]+380c1484[ 	]+ldx.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+\$a1
-[ 	]+68:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+68:[ 	]+R_LARCH_TLS_LD_PC_HI20[ 	]+TLS1
-[ 	]+6c:[ 	]+02c00005[ 	]+li\.d[ 	]+\$a1,[ 	]+0
-[ 	]+6c:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+TLS1
-[ 	]+6c:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+70:[ 	]+16000005[ 	]+lu32i.d[ 	]+\$a1,[ 	]+0
-[ 	]+70:[ 	]+R_LARCH_GOT64_PC_LO20[ 	]+TLS1
-[ 	]+74:[ 	]+030000a5[ 	]+lu52i.d[ 	]+\$a1,[ 	]+\$a1,[ 	]+0
-[ 	]+74:[ 	]+R_LARCH_GOT64_PC_HI12[ 	]+TLS1
-[ 	]+78:[ 	]+00109484[ 	]+add.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+\$a1
-[ 	]+7c:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+7c:[ 	]+R_LARCH_TLS_GD_PC_HI20[ 	]+TLS1
-[ 	]+80:[ 	]+02c00005[ 	]+li\.d[ 	]+\$a1,[ 	]+0
-[ 	]+80:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+TLS1
-[ 	]+80:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+84:[ 	]+16000005[ 	]+lu32i.d[ 	]+\$a1,[ 	]+0
-[ 	]+84:[ 	]+R_LARCH_GOT64_PC_LO20[ 	]+TLS1
-[ 	]+88:[ 	]+030000a5[ 	]+lu52i.d[ 	]+\$a1,[ 	]+\$a1,[ 	]+0
-[ 	]+88:[ 	]+R_LARCH_GOT64_PC_HI12[ 	]+TLS1
-[ 	]+8c:[ 	]+00109484[ 	]+add.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+\$a1
+0+ <.L1>:
+   0:	1a000004 	pcalau12i   	\$a0, 0
+			0: R_LARCH_PCALA_HI20	.L1
+			0: R_LARCH_RELAX	\*ABS\*
+   4:	02c00005 	li.d        	\$a1, 0
+			4: R_LARCH_PCALA_LO12	.L1
+			4: R_LARCH_RELAX	\*ABS\*
+   8:	16000005 	lu32i.d     	\$a1, 0
+			8: R_LARCH_PCALA64_LO20	.L1
+   c:	030000a5 	lu52i.d     	\$a1, \$a1, 0
+			c: R_LARCH_PCALA64_HI12	.L1
+  10:	00109484 	add.d       	\$a0, \$a0, \$a1
+  14:	1a000004 	pcalau12i   	\$a0, 0
+			14: R_LARCH_GOT_PC_HI20	.L1
+			14: R_LARCH_RELAX	\*ABS\*
+  18:	02c00005 	li.d        	\$a1, 0
+			18: R_LARCH_GOT_PC_LO12	.L1
+			18: R_LARCH_RELAX	\*ABS\*
+  1c:	16000005 	lu32i.d     	\$a1, 0
+			1c: R_LARCH_GOT64_PC_LO20	.L1
+  20:	030000a5 	lu52i.d     	\$a1, \$a1, 0
+			20: R_LARCH_GOT64_PC_HI12	.L1
+  24:	380c1484 	ldx.d       	\$a0, \$a0, \$a1
+  28:	1a000004 	pcalau12i   	\$a0, 0
+			28: R_LARCH_PCALA_HI20	.L1
+			28: R_LARCH_RELAX	\*ABS\*
+  2c:	02c00005 	li.d        	\$a1, 0
+			2c: R_LARCH_PCALA_LO12	.L1
+			2c: R_LARCH_RELAX	\*ABS\*
+  30:	16000005 	lu32i.d     	\$a1, 0
+			30: R_LARCH_PCALA64_LO20	.L1
+  34:	030000a5 	lu52i.d     	\$a1, \$a1, 0
+			34: R_LARCH_PCALA64_HI12	.L1
+  38:	00109484 	add.d       	\$a0, \$a0, \$a1
+  3c:	1a000004 	pcalau12i   	\$a0, 0
+			3c: R_LARCH_GOT_PC_HI20	.L1
+			3c: R_LARCH_RELAX	\*ABS\*
+  40:	02c00005 	li.d        	\$a1, 0
+			40: R_LARCH_GOT_PC_LO12	.L1
+			40: R_LARCH_RELAX	\*ABS\*
+  44:	16000005 	lu32i.d     	\$a1, 0
+			44: R_LARCH_GOT64_PC_LO20	.L1
+  48:	030000a5 	lu52i.d     	\$a1, \$a1, 0
+			48: R_LARCH_GOT64_PC_HI12	.L1
+  4c:	380c1484 	ldx.d       	\$a0, \$a0, \$a1
+  50:	14000004 	lu12i.w     	\$a0, 0
+			50: R_LARCH_TLS_LE_HI20	TLS1
+  54:	03800084 	ori         	\$a0, \$a0, 0x0
+			54: R_LARCH_TLS_LE_LO12	TLS1
+  58:	1a000004 	pcalau12i   	\$a0, 0
+			58: R_LARCH_TLS_IE_PC_HI20	TLS1
+  5c:	02c00005 	li.d        	\$a1, 0
+			5c: R_LARCH_TLS_IE_PC_LO12	TLS1
+  60:	16000005 	lu32i.d     	\$a1, 0
+			60: R_LARCH_TLS_IE64_PC_LO20	TLS1
+  64:	030000a5 	lu52i.d     	\$a1, \$a1, 0
+			64: R_LARCH_TLS_IE64_PC_HI12	TLS1
+  68:	380c1484 	ldx.d       	\$a0, \$a0, \$a1
+  6c:	1a000004 	pcalau12i   	\$a0, 0
+			6c: R_LARCH_TLS_LD_PC_HI20	TLS1
+			6c: R_LARCH_RELAX	\*ABS\*
+  70:	02c00005 	li.d        	\$a1, 0
+			70: R_LARCH_GOT_PC_LO12	TLS1
+			70: R_LARCH_RELAX	\*ABS\*
+  74:	16000005 	lu32i.d     	\$a1, 0
+			74: R_LARCH_GOT64_PC_LO20	TLS1
+  78:	030000a5 	lu52i.d     	\$a1, \$a1, 0
+			78: R_LARCH_GOT64_PC_HI12	TLS1
+  7c:	00109484 	add.d       	\$a0, \$a0, \$a1
+  80:	1a000004 	pcalau12i   	\$a0, 0
+			80: R_LARCH_TLS_GD_PC_HI20	TLS1
+			80: R_LARCH_RELAX	\*ABS\*
+  84:	02c00005 	li.d        	\$a1, 0
+			84: R_LARCH_GOT_PC_LO12	TLS1
+			84: R_LARCH_RELAX	\*ABS\*
+  88:	16000005 	lu32i.d     	\$a1, 0
+			88: R_LARCH_GOT64_PC_LO20	TLS1
+  8c:	030000a5 	lu52i.d     	\$a1, \$a1, 0
+			8c: R_LARCH_GOT64_PC_HI12	TLS1
+  90:	00109484 	add.d       	\$a0, \$a0, \$a1
diff --git a/gas/testsuite/gas/loongarch/macro_op_large_pc.d b/gas/testsuite/gas/loongarch/macro_op_large_pc.d
index 0c49f68e2ab..729e878ffb8 100644
--- a/gas/testsuite/gas/loongarch/macro_op_large_pc.d
+++ b/gas/testsuite/gas/loongarch/macro_op_large_pc.d
@@ -1,85 +1,89 @@ 
-#as: -mla-global-with-abs
+#as:
 #objdump: -dr
 #skip: loongarch32-*-*
 
-.*:[    ]+file format .*
+.*:     file format .*
 
 
 Disassembly of section .text:
 
-00000000.* <.L1>:
-[ 	]+0:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+0:[ 	]+R_LARCH_PCALA_HI20[ 	]+.L1
-[ 	]+0:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+4:[ 	]+02c00005[ 	]+li\.d[ 	]+\$a1,[ 	]+0
-[ 	]+4:[ 	]+R_LARCH_PCALA_LO12[ 	]+.L1
-[ 	]+4:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+8:[ 	]+16000005[ 	]+lu32i.d[ 	]+\$a1,[ 	]+0
-[ 	]+8:[ 	]+R_LARCH_PCALA64_LO20[ 	]+.L1
-[ 	]+c:[ 	]+030000a5[ 	]+lu52i.d[ 	]+\$a1,[ 	]+\$a1,[ 	]+0
-[ 	]+c:[ 	]+R_LARCH_PCALA64_HI12[ 	]+.L1
-[ 	]+10:[ 	]+00109484[ 	]+add.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+\$a1
-[ 	]+14:[ 	]+14000004[ 	]+lu12i.w[ 	]+\$a0,[ 	]+0
-[ 	]+14:[ 	]+R_LARCH_MARK_LA[ 	]+\*ABS\*
-[ 	]+14:[ 	]+R_LARCH_ABS_HI20[ 	]+.L1
-[ 	]+18:[ 	]+03800084[ 	]+ori[ 	]+\$a0,[ 	]+\$a0,[ 	]+0x0
-[ 	]+18:[ 	]+R_LARCH_ABS_LO12[ 	]+.L1
-[ 	]+1c:[ 	]+16000004[ 	]+lu32i.d[ 	]+\$a0,[ 	]+0
-[ 	]+1c:[ 	]+R_LARCH_ABS64_LO20[ 	]+.L1
-[ 	]+20:[ 	]+03000084[ 	]+lu52i.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+20:[ 	]+R_LARCH_ABS64_HI12[ 	]+.L1
-[ 	]+24:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+24:[ 	]+R_LARCH_PCALA_HI20[ 	]+.L1
-[ 	]+24:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+28:[ 	]+02c00005[ 	]+li\.d[ 	]+\$a1,[ 	]+0
-[ 	]+28:[ 	]+R_LARCH_PCALA_LO12[ 	]+.L1
-[ 	]+28:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+2c:[ 	]+16000005[ 	]+lu32i.d[ 	]+\$a1,[ 	]+0
-[ 	]+2c:[ 	]+R_LARCH_PCALA64_LO20[ 	]+.L1
-[ 	]+30:[ 	]+030000a5[ 	]+lu52i.d[ 	]+\$a1,[ 	]+\$a1,[ 	]+0
-[ 	]+30:[ 	]+R_LARCH_PCALA64_HI12[ 	]+.L1
-[ 	]+34:[ 	]+00109484[ 	]+add.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+\$a1
-[ 	]+38:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+38:[ 	]+R_LARCH_GOT_PC_HI20[ 	]+.L1
-[ 	]+38:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+3c:[ 	]+02c00005[ 	]+li\.d[ 	]+\$a1,[ 	]+0
-[ 	]+3c:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+.L1
-[ 	]+3c:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+40:[ 	]+16000005[ 	]+lu32i.d[ 	]+\$a1,[ 	]+0
-[ 	]+40:[ 	]+R_LARCH_GOT64_PC_LO20[ 	]+.L1
-[ 	]+44:[ 	]+030000a5[ 	]+lu52i.d[ 	]+\$a1,[ 	]+\$a1,[ 	]+0
-[ 	]+44:[ 	]+R_LARCH_GOT64_PC_HI12[ 	]+.L1
-[ 	]+48:[ 	]+380c1484[ 	]+ldx.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+\$a1
-[ 	]+4c:[ 	]+14000004[ 	]+lu12i.w[ 	]+\$a0,[ 	]+0
-[ 	]+4c:[ 	]+R_LARCH_TLS_LE_HI20[ 	]+TLS1
-[ 	]+50:[ 	]+03800084[ 	]+ori[ 	]+\$a0,[ 	]+\$a0,[ 	]+0x0
-[ 	]+50:[ 	]+R_LARCH_TLS_LE_LO12[ 	]+TLS1
-[ 	]+54:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+54:[ 	]+R_LARCH_TLS_IE_PC_HI20[ 	]+TLS1
-[ 	]+58:[ 	]+02c00005[ 	]+li\.d[ 	]+\$a1,[ 	]+0
-[ 	]+58:[ 	]+R_LARCH_TLS_IE_PC_LO12[ 	]+TLS1
-[ 	]+5c:[ 	]+16000005[ 	]+lu32i.d[ 	]+\$a1,[ 	]+0
-[ 	]+5c:[ 	]+R_LARCH_TLS_IE64_PC_LO20[ 	]+TLS1
-[ 	]+60:[ 	]+030000a5[ 	]+lu52i.d[ 	]+\$a1,[ 	]+\$a1,[ 	]+0
-[ 	]+60:[ 	]+R_LARCH_TLS_IE64_PC_HI12[ 	]+TLS1
-[ 	]+64:[ 	]+380c1484[ 	]+ldx.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+\$a1
-[ 	]+68:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+68:[ 	]+R_LARCH_TLS_LD_PC_HI20[ 	]+TLS1
-[ 	]+6c:[ 	]+02c00005[ 	]+li\.d[ 	]+\$a1,[ 	]+0
-[ 	]+6c:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+TLS1
-[ 	]+6c:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+70:[ 	]+16000005[ 	]+lu32i.d[ 	]+\$a1,[ 	]+0
-[ 	]+70:[ 	]+R_LARCH_GOT64_PC_LO20[ 	]+TLS1
-[ 	]+74:[ 	]+030000a5[ 	]+lu52i.d[ 	]+\$a1,[ 	]+\$a1,[ 	]+0
-[ 	]+74:[ 	]+R_LARCH_GOT64_PC_HI12[ 	]+TLS1
-[ 	]+78:[ 	]+00109484[ 	]+add.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+\$a1
-[ 	]+7c:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+7c:[ 	]+R_LARCH_TLS_GD_PC_HI20[ 	]+TLS1
-[ 	]+80:[ 	]+02c00005[ 	]+li\.d[ 	]+\$a1,[ 	]+0
-[ 	]+80:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+TLS1
-[ 	]+80:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+84:[ 	]+16000005[ 	]+lu32i.d[ 	]+\$a1,[ 	]+0
-[ 	]+84:[ 	]+R_LARCH_GOT64_PC_LO20[ 	]+TLS1
-[ 	]+88:[ 	]+030000a5[ 	]+lu52i.d[ 	]+\$a1,[ 	]+\$a1,[ 	]+0
-[ 	]+88:[ 	]+R_LARCH_GOT64_PC_HI12[ 	]+TLS1
-[ 	]+8c:[ 	]+00109484[ 	]+add.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+\$a1
+0+ <.L1>:
+   0:	1a000004 	pcalau12i   	\$a0, 0
+			0: R_LARCH_PCALA_HI20	.L1
+			0: R_LARCH_RELAX	\*ABS\*
+   4:	02c00005 	li.d        	\$a1, 0
+			4: R_LARCH_PCALA_LO12	.L1
+			4: R_LARCH_RELAX	\*ABS\*
+   8:	16000005 	lu32i.d     	\$a1, 0
+			8: R_LARCH_PCALA64_LO20	.L1
+   c:	030000a5 	lu52i.d     	\$a1, \$a1, 0
+			c: R_LARCH_PCALA64_HI12	.L1
+  10:	00109484 	add.d       	\$a0, \$a0, \$a1
+  14:	1a000004 	pcalau12i   	\$a0, 0
+			14: R_LARCH_GOT_PC_HI20	.L1
+			14: R_LARCH_RELAX	\*ABS\*
+  18:	02c00005 	li.d        	\$a1, 0
+			18: R_LARCH_GOT_PC_LO12	.L1
+			18: R_LARCH_RELAX	\*ABS\*
+  1c:	16000005 	lu32i.d     	\$a1, 0
+			1c: R_LARCH_GOT64_PC_LO20	.L1
+  20:	030000a5 	lu52i.d     	\$a1, \$a1, 0
+			20: R_LARCH_GOT64_PC_HI12	.L1
+  24:	380c1484 	ldx.d       	\$a0, \$a0, \$a1
+  28:	1a000004 	pcalau12i   	\$a0, 0
+			28: R_LARCH_PCALA_HI20	.L1
+			28: R_LARCH_RELAX	\*ABS\*
+  2c:	02c00005 	li.d        	\$a1, 0
+			2c: R_LARCH_PCALA_LO12	.L1
+			2c: R_LARCH_RELAX	\*ABS\*
+  30:	16000005 	lu32i.d     	\$a1, 0
+			30: R_LARCH_PCALA64_LO20	.L1
+  34:	030000a5 	lu52i.d     	\$a1, \$a1, 0
+			34: R_LARCH_PCALA64_HI12	.L1
+  38:	00109484 	add.d       	\$a0, \$a0, \$a1
+  3c:	1a000004 	pcalau12i   	\$a0, 0
+			3c: R_LARCH_GOT_PC_HI20	.L1
+			3c: R_LARCH_RELAX	\*ABS\*
+  40:	02c00005 	li.d        	\$a1, 0
+			40: R_LARCH_GOT_PC_LO12	.L1
+			40: R_LARCH_RELAX	\*ABS\*
+  44:	16000005 	lu32i.d     	\$a1, 0
+			44: R_LARCH_GOT64_PC_LO20	.L1
+  48:	030000a5 	lu52i.d     	\$a1, \$a1, 0
+			48: R_LARCH_GOT64_PC_HI12	.L1
+  4c:	380c1484 	ldx.d       	\$a0, \$a0, \$a1
+  50:	14000004 	lu12i.w     	\$a0, 0
+			50: R_LARCH_TLS_LE_HI20	TLS1
+  54:	03800084 	ori         	\$a0, \$a0, 0x0
+			54: R_LARCH_TLS_LE_LO12	TLS1
+  58:	1a000004 	pcalau12i   	\$a0, 0
+			58: R_LARCH_TLS_IE_PC_HI20	TLS1
+  5c:	02c00005 	li.d        	\$a1, 0
+			5c: R_LARCH_TLS_IE_PC_LO12	TLS1
+  60:	16000005 	lu32i.d     	\$a1, 0
+			60: R_LARCH_TLS_IE64_PC_LO20	TLS1
+  64:	030000a5 	lu52i.d     	\$a1, \$a1, 0
+			64: R_LARCH_TLS_IE64_PC_HI12	TLS1
+  68:	380c1484 	ldx.d       	\$a0, \$a0, \$a1
+  6c:	1a000004 	pcalau12i   	\$a0, 0
+			6c: R_LARCH_TLS_LD_PC_HI20	TLS1
+			6c: R_LARCH_RELAX	\*ABS\*
+  70:	02c00005 	li.d        	\$a1, 0
+			70: R_LARCH_GOT_PC_LO12	TLS1
+			70: R_LARCH_RELAX	\*ABS\*
+  74:	16000005 	lu32i.d     	\$a1, 0
+			74: R_LARCH_GOT64_PC_LO20	TLS1
+  78:	030000a5 	lu52i.d     	\$a1, \$a1, 0
+			78: R_LARCH_GOT64_PC_HI12	TLS1
+  7c:	00109484 	add.d       	\$a0, \$a0, \$a1
+  80:	1a000004 	pcalau12i   	\$a0, 0
+			80: R_LARCH_TLS_GD_PC_HI20	TLS1
+			80: R_LARCH_RELAX	\*ABS\*
+  84:	02c00005 	li.d        	\$a1, 0
+			84: R_LARCH_GOT_PC_LO12	TLS1
+			84: R_LARCH_RELAX	\*ABS\*
+  88:	16000005 	lu32i.d     	\$a1, 0
+			88: R_LARCH_GOT64_PC_LO20	TLS1
+  8c:	030000a5 	lu52i.d     	\$a1, \$a1, 0
+			8c: R_LARCH_GOT64_PC_HI12	TLS1
+  90:	00109484 	add.d       	\$a0, \$a0, \$a1
diff --git a/include/elf/loongarch.h b/include/elf/loongarch.h
index da2fd119181..66a47c6c3f2 100644
--- a/include/elf/loongarch.h
+++ b/include/elf/loongarch.h
@@ -271,6 +271,10 @@  RELOC_NUMBER (R_LARCH_TLS_DESC64_HI12, 119)
 
 RELOC_NUMBER (R_LARCH_TLS_DESC_CALL, 120)
 
+RELOC_NUMBER (R_LARCH_TLS_LD_PCREL20_S2, 121)
+RELOC_NUMBER (R_LARCH_TLS_GD_PCREL20_S2, 122)
+RELOC_NUMBER (R_LARCH_TLS_DESC_PCREL20_S2, 123)
+
 END_RELOC_NUMBERS (R_LARCH_count)
 
 /* Processor specific flags for the ELF header e_flags field.  */
diff --git a/ld/testsuite/ld-loongarch-elf/macro_op.d b/ld/testsuite/ld-loongarch-elf/macro_op.d
index edc71bc0dbf..f0d87c03802 100644
--- a/ld/testsuite/ld-loongarch-elf/macro_op.d
+++ b/ld/testsuite/ld-loongarch-elf/macro_op.d
@@ -1,200 +1,205 @@ 
 #as:
 #objdump: -dr
+#skip: loongarch32-*-*
 
-.*:[    ]+file format .*
+.*:     file format .*
 
 
 Disassembly of section .text:
 
-00000000.* <.L1>:
-[ 	]+0:[ 	]+00150004[ 	]+move[ 	]+\$a0,[ 	]+\$zero
-[ 	]+4:[ 	]+02bffc04[ 	]+li\.w[ 	]+\$a0,[ 	]+-1
-[ 	]+8:[ 	]+00150004[ 	]+move[ 	]+\$a0,[ 	]+\$zero
-[ 	]+c:[ 	]+02bffc04[ 	]+li\.w[ 	]+\$a0,[ 	]+-1
-[ 	]+10:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+10:[ 	]+R_LARCH_GOT_PC_HI20[ 	]+.L1
-[ 	]+10:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+14:[ 	]+28c00084[ 	]+ld.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+14:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+.L1
-[ 	]+14:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+18:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+18:[ 	]+R_LARCH_GOT_PC_HI20[ 	]+.L1
-[ 	]+18:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+1c:[ 	]+28c00084[ 	]+ld.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+1c:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+.L1
-[ 	]+1c:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+20:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+20:[ 	]+R_LARCH_GOT_PC_HI20[ 	]+.L1
-[ 	]+20:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+24:[ 	]+02c00005[ 	]+li\.d[ 	]+\$a1,[ 	]+0
-[ 	]+24:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+.L1
-[ 	]+24:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+28:[ 	]+16000005[ 	]+lu32i.d[ 	]+\$a1,[ 	]+0
-[ 	]+28:[ 	]+R_LARCH_GOT64_PC_LO20[ 	]+.L1
-[ 	]+2c:[ 	]+030000a5[ 	]+lu52i.d[ 	]+\$a1,[ 	]+\$a1,[ 	]+0
-[ 	]+2c:[ 	]+R_LARCH_GOT64_PC_HI12[ 	]+.L1
-[ 	]+30:[ 	]+380c1484[ 	]+ldx.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+\$a1
-[ 	]+34:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+34:[ 	]+R_LARCH_GOT_PC_HI20[ 	]+.L1
-[ 	]+34:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+38:[ 	]+28c00084[ 	]+ld.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+38:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+.L1
-[ 	]+38:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+3c:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+3c:[ 	]+R_LARCH_GOT_PC_HI20[ 	]+.L1
-[ 	]+3c:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+40:[ 	]+02c00005[ 	]+li\.d[ 	]+\$a1,[ 	]+0
-[ 	]+40:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+.L1
-[ 	]+40:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+44:[ 	]+16000005[ 	]+lu32i.d[ 	]+\$a1,[ 	]+0
-[ 	]+44:[ 	]+R_LARCH_GOT64_PC_LO20[ 	]+.L1
-[ 	]+48:[ 	]+030000a5[ 	]+lu52i.d[ 	]+\$a1,[ 	]+\$a1,[ 	]+0
-[ 	]+48:[ 	]+R_LARCH_GOT64_PC_HI12[ 	]+.L1
-[ 	]+4c:[ 	]+380c1484[ 	]+ldx.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+\$a1
-[ 	]+50:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+50:[ 	]+R_LARCH_GOT_PC_HI20[ 	]+.L1
-[ 	]+50:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+54:[ 	]+28c00084[ 	]+ld.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+54:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+.L1
-[ 	]+54:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+58:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+58:[ 	]+R_LARCH_GOT_PC_HI20[ 	]+.L1
-[ 	]+58:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+5c:[ 	]+02c00005[ 	]+li\.d[ 	]+\$a1,[ 	]+0
-[ 	]+5c:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+.L1
-[ 	]+5c:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+60:[ 	]+16000005[ 	]+lu32i.d[ 	]+\$a1,[ 	]+0
-[ 	]+60:[ 	]+R_LARCH_GOT64_PC_LO20[ 	]+.L1
-[ 	]+64:[ 	]+030000a5[ 	]+lu52i.d[ 	]+\$a1,[ 	]+\$a1,[ 	]+0
-[ 	]+64:[ 	]+R_LARCH_GOT64_PC_HI12[ 	]+.L1
-[ 	]+68:[ 	]+380c1484[ 	]+ldx.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+\$a1
-[ 	]+6c:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+6c:[ 	]+R_LARCH_PCALA_HI20[ 	]+.L1
-[ 	]+6c:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+70:[ 	]+02c00084[ 	]+addi.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+70:[ 	]+R_LARCH_PCALA_LO12[ 	]+.L1
-[ 	]+70:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+74:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+74:[ 	]+R_LARCH_PCALA_HI20[ 	]+.L1
-[ 	]+74:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+78:[ 	]+02c00005[ 	]+li\.d[ 	]+\$a1,[ 	]+0
-[ 	]+78:[ 	]+R_LARCH_PCALA_LO12[ 	]+.L1
-[ 	]+78:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+7c:[ 	]+16000005[ 	]+lu32i.d[ 	]+\$a1,[ 	]+0
-[ 	]+7c:[ 	]+R_LARCH_PCALA64_LO20[ 	]+.L1
-[ 	]+80:[ 	]+030000a5[ 	]+lu52i.d[ 	]+\$a1,[ 	]+\$a1,[ 	]+0
-[ 	]+80:[ 	]+R_LARCH_PCALA64_HI12[ 	]+.L1
-[ 	]+84:[ 	]+00109484[ 	]+add.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+\$a1
-[ 	]+88:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+88:[ 	]+R_LARCH_PCALA_HI20[ 	]+.L1
-[ 	]+88:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+8c:[ 	]+02c00084[ 	]+addi.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+8c:[ 	]+R_LARCH_PCALA_LO12[ 	]+.L1
-[ 	]+8c:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+90:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+90:[ 	]+R_LARCH_PCALA_HI20[ 	]+.L1
-[ 	]+90:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+94:[ 	]+02c00005[ 	]+li\.d[ 	]+\$a1,[ 	]+0
-[ 	]+94:[ 	]+R_LARCH_PCALA_LO12[ 	]+.L1
-[ 	]+94:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+98:[ 	]+16000005[ 	]+lu32i.d[ 	]+\$a1,[ 	]+0
-[ 	]+98:[ 	]+R_LARCH_PCALA64_LO20[ 	]+.L1
-[ 	]+9c:[ 	]+030000a5[ 	]+lu52i.d[ 	]+\$a1,[ 	]+\$a1,[ 	]+0
-[ 	]+9c:[ 	]+R_LARCH_PCALA64_HI12[ 	]+.L1
-[ 	]+a0:[ 	]+00109484[ 	]+add.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+\$a1
-[ 	]+a4:[ 	]+14000004[ 	]+lu12i.w[ 	]+\$a0,[ 	]+0
-[ 	]+a4:[ 	]+R_LARCH_MARK_LA[ 	]+\*ABS\*
-[ 	]+a4:[ 	]+R_LARCH_ABS_HI20[ 	]+.L1
-[ 	]+a8:[ 	]+03800084[ 	]+ori[ 	]+\$a0,[ 	]+\$a0,[ 	]+0x0
-[ 	]+a8:[ 	]+R_LARCH_ABS_LO12[ 	]+.L1
-[ 	]+ac:[ 	]+16000004[ 	]+lu32i.d[ 	]+\$a0,[ 	]+0
-[ 	]+ac:[ 	]+R_LARCH_ABS64_LO20[ 	]+.L1
-[ 	]+b0:[ 	]+03000084[ 	]+lu52i.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+b0:[ 	]+R_LARCH_ABS64_HI12[ 	]+.L1
-[ 	]+b4:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+b4:[ 	]+R_LARCH_PCALA_HI20[ 	]+.L1
-[ 	]+b4:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+b8:[ 	]+02c00084[ 	]+addi.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+b8:[ 	]+R_LARCH_PCALA_LO12[ 	]+.L1
-[ 	]+b8:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+bc:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+bc:[ 	]+R_LARCH_PCALA_HI20[ 	]+.L1
-[ 	]+bc:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+c0:[ 	]+02c00084[ 	]+addi.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+c0:[ 	]+R_LARCH_PCALA_LO12[ 	]+.L1
-[ 	]+c0:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+c4:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+c4:[ 	]+R_LARCH_PCALA_HI20[ 	]+.L1
-[ 	]+c4:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+c8:[ 	]+02c00005[ 	]+li\.d[ 	]+\$a1,[ 	]+0
-[ 	]+c8:[ 	]+R_LARCH_PCALA_LO12[ 	]+.L1
-[ 	]+c8:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+cc:[ 	]+16000005[ 	]+lu32i.d[ 	]+\$a1,[ 	]+0
-[ 	]+cc:[ 	]+R_LARCH_PCALA64_LO20[ 	]+.L1
-[ 	]+d0:[ 	]+030000a5[ 	]+lu52i.d[ 	]+\$a1,[ 	]+\$a1,[ 	]+0
-[ 	]+d0:[ 	]+R_LARCH_PCALA64_HI12[ 	]+.L1
-[ 	]+d4:[ 	]+00109484[ 	]+add.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+\$a1
-[ 	]+d8:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+d8:[ 	]+R_LARCH_GOT_PC_HI20[ 	]+.L1
-[ 	]+d8:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+dc:[ 	]+28c00084[ 	]+ld.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+dc:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+.L1
-[ 	]+dc:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+e0:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+e0:[ 	]+R_LARCH_GOT_PC_HI20[ 	]+.L1
-[ 	]+e0:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+e4:[ 	]+02c00005[ 	]+li\.d[ 	]+\$a1,[ 	]+0
-[ 	]+e4:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+.L1
-[ 	]+e4:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+e8:[ 	]+16000005[ 	]+lu32i.d[ 	]+\$a1,[ 	]+0
-[ 	]+e8:[ 	]+R_LARCH_GOT64_PC_LO20[ 	]+.L1
-[ 	]+ec:[ 	]+030000a5[ 	]+lu52i.d[ 	]+\$a1,[ 	]+\$a1,[ 	]+0
-[ 	]+ec:[ 	]+R_LARCH_GOT64_PC_HI12[ 	]+.L1
-[ 	]+f0:[ 	]+380c1484[ 	]+ldx.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+\$a1
-[ 	]+f4:[ 	]+14000004[ 	]+lu12i.w[ 	]+\$a0,[ 	]+0
-[ 	]+f4:[ 	]+R_LARCH_TLS_LE_HI20[ 	]+TLS1
-[ 	]+f8:[ 	]+03800084[ 	]+ori[ 	]+\$a0,[ 	]+\$a0,[ 	]+0x0
-[ 	]+f8:[ 	]+R_LARCH_TLS_LE_LO12[ 	]+TLS1
-[ 	]+fc:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+fc:[ 	]+R_LARCH_TLS_IE_PC_HI20[ 	]+TLS1
-[ 	]+100:[ 	]+28c00084[ 	]+ld.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+100:[ 	]+R_LARCH_TLS_IE_PC_LO12[ 	]+TLS1
-[ 	]+104:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+104:[ 	]+R_LARCH_TLS_IE_PC_HI20[ 	]+TLS1
-[ 	]+108:[ 	]+02c00005[ 	]+li\.d[ 	]+\$a1,[ 	]+0
-[ 	]+108:[ 	]+R_LARCH_TLS_IE_PC_LO12[ 	]+TLS1
-[ 	]+10c:[ 	]+16000005[ 	]+lu32i.d[ 	]+\$a1,[ 	]+0
-[ 	]+10c:[ 	]+R_LARCH_TLS_IE64_PC_LO20[ 	]+TLS1
-[ 	]+110:[ 	]+030000a5[ 	]+lu52i.d[ 	]+\$a1,[ 	]+\$a1,[ 	]+0
-[ 	]+110:[ 	]+R_LARCH_TLS_IE64_PC_HI12[ 	]+TLS1
-[ 	]+114:[ 	]+380c1484[ 	]+ldx.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+\$a1
-[ 	]+118:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+118:[ 	]+R_LARCH_TLS_LD_PC_HI20[ 	]+TLS1
-[ 	]+11c:[ 	]+02c00084[ 	]+addi.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+11c:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+TLS1
-[ 	]+11c:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+120:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+120:[ 	]+R_LARCH_TLS_LD_PC_HI20[ 	]+TLS1
-[ 	]+124:[ 	]+02c00005[ 	]+li\.d[ 	]+\$a1,[ 	]+0
-[ 	]+124:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+TLS1
-[ 	]+124:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+128:[ 	]+16000005[ 	]+lu32i.d[ 	]+\$a1,[ 	]+0
-[ 	]+128:[ 	]+R_LARCH_GOT64_PC_LO20[ 	]+TLS1
-[ 	]+12c:[ 	]+030000a5[ 	]+lu52i.d[ 	]+\$a1,[ 	]+\$a1,[ 	]+0
-[ 	]+12c:[ 	]+R_LARCH_GOT64_PC_HI12[ 	]+TLS1
-[ 	]+130:[ 	]+00109484[ 	]+add.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+\$a1
-[ 	]+134:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+134:[ 	]+R_LARCH_TLS_GD_PC_HI20[ 	]+TLS1
-[ 	]+138:[ 	]+02c00084[ 	]+addi.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+138:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+TLS1
-[ 	]+138:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+13c:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+13c:[ 	]+R_LARCH_TLS_GD_PC_HI20[ 	]+TLS1
-[ 	]+140:[ 	]+02c00005[ 	]+li\.d[ 	]+\$a1,[ 	]+0
-[ 	]+140:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+TLS1
-[ 	]+140:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+144:[ 	]+16000005[ 	]+lu32i.d[ 	]+\$a1,[ 	]+0
-[ 	]+144:[ 	]+R_LARCH_GOT64_PC_LO20[ 	]+TLS1
-[ 	]+148:[ 	]+030000a5[ 	]+lu52i.d[ 	]+\$a1,[ 	]+\$a1,[ 	]+0
-[ 	]+148:[ 	]+R_LARCH_GOT64_PC_HI12[ 	]+TLS1
-[ 	]+14c:[ 	]+00109484[ 	]+add.d[ 	]+\$a0,[ 	]+\$a0,[ 	]+\$a1
+0+ <.L1>:
+   0:	00150004 	move        	\$a0, \$zero
+   4:	02bffc04 	li.w        	\$a0, -1
+   8:	00150004 	move        	\$a0, \$zero
+   c:	02bffc04 	li.w        	\$a0, -1
+  10:	1a000004 	pcalau12i   	\$a0, 0
+			10: R_LARCH_GOT_PC_HI20	.L1
+			10: R_LARCH_RELAX	\*ABS\*
+  14:	28c00084 	ld.d        	\$a0, \$a0, 0
+			14: R_LARCH_GOT_PC_LO12	.L1
+			14: R_LARCH_RELAX	\*ABS\*
+  18:	1a000004 	pcalau12i   	\$a0, 0
+			18: R_LARCH_GOT_PC_HI20	.L1
+			18: R_LARCH_RELAX	\*ABS\*
+  1c:	28c00084 	ld.d        	\$a0, \$a0, 0
+			1c: R_LARCH_GOT_PC_LO12	.L1
+			1c: R_LARCH_RELAX	\*ABS\*
+  20:	1a000004 	pcalau12i   	\$a0, 0
+			20: R_LARCH_GOT_PC_HI20	.L1
+			20: R_LARCH_RELAX	\*ABS\*
+  24:	02c00005 	li.d        	\$a1, 0
+			24: R_LARCH_GOT_PC_LO12	.L1
+			24: R_LARCH_RELAX	\*ABS\*
+  28:	16000005 	lu32i.d     	\$a1, 0
+			28: R_LARCH_GOT64_PC_LO20	.L1
+  2c:	030000a5 	lu52i.d     	\$a1, \$a1, 0
+			2c: R_LARCH_GOT64_PC_HI12	.L1
+  30:	380c1484 	ldx.d       	\$a0, \$a0, \$a1
+  34:	1a000004 	pcalau12i   	\$a0, 0
+			34: R_LARCH_GOT_PC_HI20	.L1
+			34: R_LARCH_RELAX	\*ABS\*
+  38:	28c00084 	ld.d        	\$a0, \$a0, 0
+			38: R_LARCH_GOT_PC_LO12	.L1
+			38: R_LARCH_RELAX	\*ABS\*
+  3c:	1a000004 	pcalau12i   	\$a0, 0
+			3c: R_LARCH_GOT_PC_HI20	.L1
+			3c: R_LARCH_RELAX	\*ABS\*
+  40:	02c00005 	li.d        	\$a1, 0
+			40: R_LARCH_GOT_PC_LO12	.L1
+			40: R_LARCH_RELAX	\*ABS\*
+  44:	16000005 	lu32i.d     	\$a1, 0
+			44: R_LARCH_GOT64_PC_LO20	.L1
+  48:	030000a5 	lu52i.d     	\$a1, \$a1, 0
+			48: R_LARCH_GOT64_PC_HI12	.L1
+  4c:	380c1484 	ldx.d       	\$a0, \$a0, \$a1
+  50:	1a000004 	pcalau12i   	\$a0, 0
+			50: R_LARCH_GOT_PC_HI20	.L1
+			50: R_LARCH_RELAX	\*ABS\*
+  54:	28c00084 	ld.d        	\$a0, \$a0, 0
+			54: R_LARCH_GOT_PC_LO12	.L1
+			54: R_LARCH_RELAX	\*ABS\*
+  58:	1a000004 	pcalau12i   	\$a0, 0
+			58: R_LARCH_GOT_PC_HI20	.L1
+			58: R_LARCH_RELAX	\*ABS\*
+  5c:	02c00005 	li.d        	\$a1, 0
+			5c: R_LARCH_GOT_PC_LO12	.L1
+			5c: R_LARCH_RELAX	\*ABS\*
+  60:	16000005 	lu32i.d     	\$a1, 0
+			60: R_LARCH_GOT64_PC_LO20	.L1
+  64:	030000a5 	lu52i.d     	\$a1, \$a1, 0
+			64: R_LARCH_GOT64_PC_HI12	.L1
+  68:	380c1484 	ldx.d       	\$a0, \$a0, \$a1
+  6c:	1a000004 	pcalau12i   	\$a0, 0
+			6c: R_LARCH_PCALA_HI20	.L1
+			6c: R_LARCH_RELAX	\*ABS\*
+  70:	02c00084 	addi.d      	\$a0, \$a0, 0
+			70: R_LARCH_PCALA_LO12	.L1
+			70: R_LARCH_RELAX	\*ABS\*
+  74:	1a000004 	pcalau12i   	\$a0, 0
+			74: R_LARCH_PCALA_HI20	.L1
+			74: R_LARCH_RELAX	\*ABS\*
+  78:	02c00005 	li.d        	\$a1, 0
+			78: R_LARCH_PCALA_LO12	.L1
+			78: R_LARCH_RELAX	\*ABS\*
+  7c:	16000005 	lu32i.d     	\$a1, 0
+			7c: R_LARCH_PCALA64_LO20	.L1
+  80:	030000a5 	lu52i.d     	\$a1, \$a1, 0
+			80: R_LARCH_PCALA64_HI12	.L1
+  84:	00109484 	add.d       	\$a0, \$a0, \$a1
+  88:	1a000004 	pcalau12i   	\$a0, 0
+			88: R_LARCH_PCALA_HI20	.L1
+			88: R_LARCH_RELAX	\*ABS\*
+  8c:	02c00084 	addi.d      	\$a0, \$a0, 0
+			8c: R_LARCH_PCALA_LO12	.L1
+			8c: R_LARCH_RELAX	\*ABS\*
+  90:	1a000004 	pcalau12i   	\$a0, 0
+			90: R_LARCH_PCALA_HI20	.L1
+			90: R_LARCH_RELAX	\*ABS\*
+  94:	02c00005 	li.d        	\$a1, 0
+			94: R_LARCH_PCALA_LO12	.L1
+			94: R_LARCH_RELAX	\*ABS\*
+  98:	16000005 	lu32i.d     	\$a1, 0
+			98: R_LARCH_PCALA64_LO20	.L1
+  9c:	030000a5 	lu52i.d     	\$a1, \$a1, 0
+			9c: R_LARCH_PCALA64_HI12	.L1
+  a0:	00109484 	add.d       	\$a0, \$a0, \$a1
+  a4:	14000004 	lu12i.w     	\$a0, 0
+			a4: R_LARCH_MARK_LA	\*ABS\*
+			a4: R_LARCH_ABS_HI20	.L1
+  a8:	03800084 	ori         	\$a0, \$a0, 0x0
+			a8: R_LARCH_ABS_LO12	.L1
+  ac:	16000004 	lu32i.d     	\$a0, 0
+			ac: R_LARCH_ABS64_LO20	.L1
+  b0:	03000084 	lu52i.d     	\$a0, \$a0, 0
+			b0: R_LARCH_ABS64_HI12	.L1
+  b4:	1a000004 	pcalau12i   	\$a0, 0
+			b4: R_LARCH_PCALA_HI20	.L1
+			b4: R_LARCH_RELAX	\*ABS\*
+  b8:	02c00084 	addi.d      	\$a0, \$a0, 0
+			b8: R_LARCH_PCALA_LO12	.L1
+			b8: R_LARCH_RELAX	\*ABS\*
+  bc:	1a000004 	pcalau12i   	\$a0, 0
+			bc: R_LARCH_PCALA_HI20	.L1
+			bc: R_LARCH_RELAX	\*ABS\*
+  c0:	02c00084 	addi.d      	\$a0, \$a0, 0
+			c0: R_LARCH_PCALA_LO12	.L1
+			c0: R_LARCH_RELAX	\*ABS\*
+  c4:	1a000004 	pcalau12i   	\$a0, 0
+			c4: R_LARCH_PCALA_HI20	.L1
+			c4: R_LARCH_RELAX	\*ABS\*
+  c8:	02c00005 	li.d        	\$a1, 0
+			c8: R_LARCH_PCALA_LO12	.L1
+			c8: R_LARCH_RELAX	\*ABS\*
+  cc:	16000005 	lu32i.d     	\$a1, 0
+			cc: R_LARCH_PCALA64_LO20	.L1
+  d0:	030000a5 	lu52i.d     	\$a1, \$a1, 0
+			d0: R_LARCH_PCALA64_HI12	.L1
+  d4:	00109484 	add.d       	\$a0, \$a0, \$a1
+  d8:	1a000004 	pcalau12i   	\$a0, 0
+			d8: R_LARCH_GOT_PC_HI20	.L1
+			d8: R_LARCH_RELAX	\*ABS\*
+  dc:	28c00084 	ld.d        	\$a0, \$a0, 0
+			dc: R_LARCH_GOT_PC_LO12	.L1
+			dc: R_LARCH_RELAX	\*ABS\*
+  e0:	1a000004 	pcalau12i   	\$a0, 0
+			e0: R_LARCH_GOT_PC_HI20	.L1
+			e0: R_LARCH_RELAX	\*ABS\*
+  e4:	02c00005 	li.d        	\$a1, 0
+			e4: R_LARCH_GOT_PC_LO12	.L1
+			e4: R_LARCH_RELAX	\*ABS\*
+  e8:	16000005 	lu32i.d     	\$a1, 0
+			e8: R_LARCH_GOT64_PC_LO20	.L1
+  ec:	030000a5 	lu52i.d     	\$a1, \$a1, 0
+			ec: R_LARCH_GOT64_PC_HI12	.L1
+  f0:	380c1484 	ldx.d       	\$a0, \$a0, \$a1
+  f4:	14000004 	lu12i.w     	\$a0, 0
+			f4: R_LARCH_TLS_LE_HI20	TLS1
+  f8:	03800084 	ori         	\$a0, \$a0, 0x0
+			f8: R_LARCH_TLS_LE_LO12	TLS1
+  fc:	1a000004 	pcalau12i   	\$a0, 0
+			fc: R_LARCH_TLS_IE_PC_HI20	TLS1
+ 100:	28c00084 	ld.d        	\$a0, \$a0, 0
+			100: R_LARCH_TLS_IE_PC_LO12	TLS1
+ 104:	1a000004 	pcalau12i   	\$a0, 0
+			104: R_LARCH_TLS_IE_PC_HI20	TLS1
+ 108:	02c00005 	li.d        	\$a1, 0
+			108: R_LARCH_TLS_IE_PC_LO12	TLS1
+ 10c:	16000005 	lu32i.d     	\$a1, 0
+			10c: R_LARCH_TLS_IE64_PC_LO20	TLS1
+ 110:	030000a5 	lu52i.d     	\$a1, \$a1, 0
+			110: R_LARCH_TLS_IE64_PC_HI12	TLS1
+ 114:	380c1484 	ldx.d       	\$a0, \$a0, \$a1
+ 118:	1a000004 	pcalau12i   	\$a0, 0
+			118: R_LARCH_TLS_LD_PC_HI20	TLS1
+			118: R_LARCH_RELAX	\*ABS\*
+ 11c:	02c00084 	addi.d      	\$a0, \$a0, 0
+			11c: R_LARCH_GOT_PC_LO12	TLS1
+			11c: R_LARCH_RELAX	\*ABS\*
+ 120:	1a000004 	pcalau12i   	\$a0, 0
+			120: R_LARCH_TLS_LD_PC_HI20	TLS1
+			120: R_LARCH_RELAX	\*ABS\*
+ 124:	02c00005 	li.d        	\$a1, 0
+			124: R_LARCH_GOT_PC_LO12	TLS1
+			124: R_LARCH_RELAX	\*ABS\*
+ 128:	16000005 	lu32i.d     	\$a1, 0
+			128: R_LARCH_GOT64_PC_LO20	TLS1
+ 12c:	030000a5 	lu52i.d     	\$a1, \$a1, 0
+			12c: R_LARCH_GOT64_PC_HI12	TLS1
+ 130:	00109484 	add.d       	\$a0, \$a0, \$a1
+ 134:	1a000004 	pcalau12i   	\$a0, 0
+			134: R_LARCH_TLS_GD_PC_HI20	TLS1
+			134: R_LARCH_RELAX	\*ABS\*
+ 138:	02c00084 	addi.d      	\$a0, \$a0, 0
+			138: R_LARCH_GOT_PC_LO12	TLS1
+			138: R_LARCH_RELAX	\*ABS\*
+ 13c:	1a000004 	pcalau12i   	\$a0, 0
+			13c: R_LARCH_TLS_GD_PC_HI20	TLS1
+			13c: R_LARCH_RELAX	\*ABS\*
+ 140:	02c00005 	li.d        	\$a1, 0
+			140: R_LARCH_GOT_PC_LO12	TLS1
+			140: R_LARCH_RELAX	\*ABS\*
+ 144:	16000005 	lu32i.d     	\$a1, 0
+			144: R_LARCH_GOT64_PC_LO20	TLS1
+ 148:	030000a5 	lu52i.d     	\$a1, \$a1, 0
+			148: R_LARCH_GOT64_PC_HI12	TLS1
+ 14c:	00109484 	add.d       	\$a0, \$a0, \$a1
diff --git a/ld/testsuite/ld-loongarch-elf/macro_op_32.d b/ld/testsuite/ld-loongarch-elf/macro_op_32.d
index 188026a5780..a7349aa8dc0 100644
--- a/ld/testsuite/ld-loongarch-elf/macro_op_32.d
+++ b/ld/testsuite/ld-loongarch-elf/macro_op_32.d
@@ -2,66 +2,68 @@ 
 #objdump: -dr
 #skip: loongarch64-*-*
 
-.*:[    ]+file format .*
+.*:     file format .*
 
 
 Disassembly of section .text:
 
-00000000.* <.L1>:
-[ 	]+0:[ 	]+00150004[ 	]+move[ 	]+\$a0,[ 	]+\$zero
-[ 	]+4:[ 	]+02bffc04[ 	]+li\.w[ 	]+\$a0,[ 	]+-1
-[ 	]+8:[ 	]+00150004[ 	]+move[ 	]+\$a0,[ 	]+\$zero
-[ 	]+c:[ 	]+02bffc04[ 	]+li\.w[ 	]+\$a0,[ 	]+-1
-[ 	]+10:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+10:[ 	]+R_LARCH_GOT_PC_HI20[ 	]+.L1
-[ 	]+10:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+14:[ 	]+28800084[ 	]+ld.w[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+14:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+.L1
-[ 	]+14:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+18:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+18:[ 	]+R_LARCH_GOT_PC_HI20[ 	]+.L1
-[ 	]+18:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+1c:[ 	]+28800084[ 	]+ld.w[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+1c:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+.L1
-[ 	]+1c:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+20:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+20:[ 	]+R_LARCH_PCALA_HI20[ 	]+.L1
-[ 	]+20:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+24:[ 	]+02800084[ 	]+addi.w[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+24:[ 	]+R_LARCH_PCALA_LO12[ 	]+.L1
-[ 	]+24:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+28:[ 	]+14000004[ 	]+lu12i.w[ 	]+\$a0,[ 	]+0
-[ 	]+28:[ 	]+R_LARCH_MARK_LA[ 	]+\*ABS\*
-[ 	]+28:[ 	]+R_LARCH_ABS_HI20[ 	]+.L1
-[ 	]+2c:[ 	]+03800084[ 	]+ori[ 	]+\$a0,[ 	]+\$a0,[ 	]+0x0
-[ 	]+2c:[ 	]+R_LARCH_ABS_LO12[ 	]+.L1
-[ 	]+30:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+30:[ 	]+R_LARCH_PCALA_HI20[ 	]+.L1
-[ 	]+30:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+34:[ 	]+02800084[ 	]+addi.w[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+34:[ 	]+R_LARCH_PCALA_LO12[ 	]+.L1
-[ 	]+34:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+38:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+38:[ 	]+R_LARCH_GOT_PC_HI20[ 	]+.L1
-[ 	]+38:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+3c:[ 	]+28800084[ 	]+ld.w[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+3c:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+.L1
-[ 	]+3c:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+40:[ 	]+14000004[ 	]+lu12i.w[ 	]+\$a0,[ 	]+0
-[ 	]+40:[ 	]+R_LARCH_TLS_LE_HI20[ 	]+TLS1
-[ 	]+44:[ 	]+03800084[ 	]+ori[ 	]+\$a0,[ 	]+\$a0,[ 	]+0x0
-[ 	]+44:[ 	]+R_LARCH_TLS_LE_LO12[ 	]+TLS1
-[ 	]+48:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+48:[ 	]+R_LARCH_TLS_IE_PC_HI20[ 	]+TLS1
-[ 	]+4c:[ 	]+28800084[ 	]+ld.w[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+4c:[ 	]+R_LARCH_TLS_IE_PC_LO12[ 	]+TLS1
-[ 	]+50:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+50:[ 	]+R_LARCH_TLS_LD_PC_HI20[ 	]+TLS1
-[ 	]+54:[ 	]+02800084[ 	]+addi.w[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+54:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+TLS1
-[ 	]+54:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
-[ 	]+58:[ 	]+1a000004[ 	]+pcalau12i[ 	]+\$a0,[ 	]+0
-[ 	]+58:[ 	]+R_LARCH_TLS_GD_PC_HI20[ 	]+TLS1
-[ 	]+5c:[ 	]+02800084[ 	]+addi.w[ 	]+\$a0,[ 	]+\$a0,[ 	]+0
-[ 	]+5c:[ 	]+R_LARCH_GOT_PC_LO12[ 	]+TLS1
-[ 	]+5c:[ 	]+R_LARCH_RELAX[ 	]+\*ABS\*
+0+ <.L1>:
+   0:	00150004 	move        	\$a0, \$zero
+   4:	02bffc04 	li.w        	\$a0, -1
+   8:	00150004 	move        	\$a0, \$zero
+   c:	02bffc04 	li.w        	\$a0, -1
+  10:	1a000004 	pcalau12i   	\$a0, 0
+			10: R_LARCH_GOT_PC_HI20	.L1
+			10: R_LARCH_RELAX	\*ABS\*
+  14:	28800084 	ld.w        	\$a0, \$a0, 0
+			14: R_LARCH_GOT_PC_LO12	.L1
+			14: R_LARCH_RELAX	\*ABS\*
+  18:	1a000004 	pcalau12i   	\$a0, 0
+			18: R_LARCH_GOT_PC_HI20	.L1
+			18: R_LARCH_RELAX	\*ABS\*
+  1c:	28800084 	ld.w        	\$a0, \$a0, 0
+			1c: R_LARCH_GOT_PC_LO12	.L1
+			1c: R_LARCH_RELAX	\*ABS\*
+  20:	1a000004 	pcalau12i   	\$a0, 0
+			20: R_LARCH_PCALA_HI20	.L1
+			20: R_LARCH_RELAX	\*ABS\*
+  24:	02800084 	addi.w      	\$a0, \$a0, 0
+			24: R_LARCH_PCALA_LO12	.L1
+			24: R_LARCH_RELAX	\*ABS\*
+  28:	14000004 	lu12i.w     	\$a0, 0
+			28: R_LARCH_MARK_LA	\*ABS\*
+			28: R_LARCH_ABS_HI20	.L1
+  2c:	03800084 	ori         	\$a0, \$a0, 0x0
+			2c: R_LARCH_ABS_LO12	.L1
+  30:	1a000004 	pcalau12i   	\$a0, 0
+			30: R_LARCH_PCALA_HI20	.L1
+			30: R_LARCH_RELAX	\*ABS\*
+  34:	02800084 	addi.w      	\$a0, \$a0, 0
+			34: R_LARCH_PCALA_LO12	.L1
+			34: R_LARCH_RELAX	\*ABS\*
+  38:	1a000004 	pcalau12i   	\$a0, 0
+			38: R_LARCH_GOT_PC_HI20	.L1
+			38: R_LARCH_RELAX	\*ABS\*
+  3c:	28800084 	ld.w        	\$a0, \$a0, 0
+			3c: R_LARCH_GOT_PC_LO12	.L1
+			3c: R_LARCH_RELAX	\*ABS\*
+  40:	14000004 	lu12i.w     	\$a0, 0
+			40: R_LARCH_TLS_LE_HI20	TLS1
+  44:	03800084 	ori         	\$a0, \$a0, 0x0
+			44: R_LARCH_TLS_LE_LO12	TLS1
+  48:	1a000004 	pcalau12i   	\$a0, 0
+			48: R_LARCH_TLS_IE_PC_HI20	TLS1
+  4c:	28800084 	ld.w        	\$a0, \$a0, 0
+			4c: R_LARCH_TLS_IE_PC_LO12	TLS1
+  50:	1a000004 	pcalau12i   	\$a0, 0
+			50: R_LARCH_TLS_LD_PC_HI20	TLS1
+			50: R_LARCH_RELAX	\*ABS\*
+  54:	02800084 	addi.w      	\$a0, \$a0, 0
+			54: R_LARCH_GOT_PC_LO12	TLS1
+			54: R_LARCH_RELAX	\*ABS\*
+  58:	1a000004 	pcalau12i   	\$a0, 0
+			58: R_LARCH_TLS_GD_PC_HI20	TLS1
+			58: R_LARCH_RELAX	\*ABS\*
+  5c:	02800084 	addi.w      	\$a0, \$a0, 0
+			5c: R_LARCH_GOT_PC_LO12	TLS1
+			5c: R_LARCH_RELAX	\*ABS\*