https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93053
--- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> --- I've tried manually: --- cas_16_1.s~ 2020-04-14 12:19:03.000000000 +0200 +++ cas_16_1.s 2020-04-14 12:20:10.083098672 +0200 @@ -5,7 +5,7 @@ # 1 "<command-line>" 2 # 1 "/usr/src/gcc/libgcc/config/aarch64/lse.S" # 53 "/usr/src/gcc/libgcc/config/aarch64/lse.S" - .arch armv8-a+lse + .arch armv8-a .hidden __aarch64_have_lse_atomics @@ -37,7 +37,8 @@ STARTFN __aarch64_cas16_relax JUMP_IF_NOT_LSE 8f # 166 "/usr/src/gcc/libgcc/config/aarch64/lse.S" - casp x0, x1, x2, x3, [x4] +// casp x0, x1, x2, x3, [x4] + .word 0x48207c82 ret 8: mov x16, x0 which assembles (the constant taken from aarch64-linux-objdump -dr before the changes), but for some reason when disassembled aarch64-linux-objdump -dr knows that it was .word and not casp instruction. Any way to emit insns not supported by the assembler?