https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121415
Bug ID: 121415 Summary: aarch64: Failure to handle PSTATE.SM & ZA for tlsdesc calls Product: gcc Version: 16.0 Status: UNCONFIRMED Keywords: aarch64-sme, wrong-code Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: rsandifo at gcc dot gnu.org Target Milestone: --- Target: aarch64*-*-* For: extern __thread int x; int f() __arm_streaming_compatible { return x; } compiled with -O2 -fPIC, we get: f: .LFB0: .cfi_startproc stp x29, x30, [sp, -16]! .cfi_def_cfa_offset 16 .cfi_offset 29, -16 .cfi_offset 30, -8 mov x29, sp adrp x0, :tlsdesc:x ldr x1, [x0, #:tlsdesc_lo12:x] add x0, x0, :tlsdesc_lo12:x .tlsdesccall x blr x1 mrs x1, tpidr_el0 ldp x29, x30, [sp], 16 .cfi_restore 30 .cfi_restore 29 .cfi_def_cfa_offset 0 ldr w0, [x1, x0] ret .cfi_endproc which fails to force non-streaming mode around the call. A function with ZA or ZT0 state would also need to handle that. Thanks to Wilco for the spot.