https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120433
--- Comment #2 from fujin zhao <bigmagicreadsun at gmail dot com> --- I've refactored a0_in_asm() as requested, but the result remains unchanged. Here’s the updated implementation: __attribute__((noinline)) uint32_t a0_in_asm() { uint32_t result; asm volatile ( "lui %0, 0xFFFF\n" // Load upper 20 bits "slli %0, %0, 0x4\n" // Shift left by 4 "addi %0, %0, 0x231\n"// Add lower 12 bits : "=r" (result) // Output to 'result' : // No input operands : "a0" // Clobber list (a0 modified) ); return result; // Explicit return } Here's the complete example: https://godbolt.org/z/eTK5bna3o