@@ -652,6 +652,20 @@ impl<'tcx> InlineAssemblyGenerator<'_, 'tcx> {
652652                                        . emit ( & mut  generated_asm,  InlineAsmArch :: X86_64 ,  * modifier) 
653653                                        . unwrap ( ) , 
654654                                } , 
655+                                 InlineAsmArch :: AArch64  => match  reg { 
656+                                     InlineAsmReg :: AArch64 ( reg)  if  reg. vreg_index ( ) . is_some ( )  => { 
657+                                         // rustc emits v0 rather than q0 
658+                                         reg. emit ( 
659+                                             & mut  generated_asm, 
660+                                             InlineAsmArch :: AArch64 , 
661+                                             Some ( modifier. unwrap_or ( 'q' ) ) , 
662+                                         ) 
663+                                         . unwrap ( ) 
664+                                     } 
665+                                     _ => reg
666+                                         . emit ( & mut  generated_asm,  InlineAsmArch :: AArch64 ,  * modifier) 
667+                                         . unwrap ( ) , 
668+                                 } , 
655669                                _ => reg. emit ( & mut  generated_asm,  self . arch ,  * modifier) . unwrap ( ) , 
656670                            } 
657671                        } 
@@ -809,7 +823,13 @@ impl<'tcx> InlineAssemblyGenerator<'_, 'tcx> {
809823            } 
810824            InlineAsmArch :: AArch64  => { 
811825                generated_asm. push_str ( "    str " ) ; 
812-                 reg. emit ( generated_asm,  InlineAsmArch :: AArch64 ,  None ) . unwrap ( ) ; 
826+                 match  reg { 
827+                     InlineAsmReg :: AArch64 ( reg)  if  reg. vreg_index ( ) . is_some ( )  => { 
828+                         // rustc emits v0 rather than q0 
829+                         reg. emit ( generated_asm,  InlineAsmArch :: AArch64 ,  Some ( 'q' ) ) . unwrap ( ) 
830+                     } 
831+                     _ => reg. emit ( generated_asm,  InlineAsmArch :: AArch64 ,  None ) . unwrap ( ) , 
832+                 } 
813833                writeln ! ( generated_asm,  ", [x19, 0x{:x}]" ,  offset. bytes( ) ) . unwrap ( ) ; 
814834            } 
815835            InlineAsmArch :: RiscV64  => { 
@@ -851,7 +871,13 @@ impl<'tcx> InlineAssemblyGenerator<'_, 'tcx> {
851871            } 
852872            InlineAsmArch :: AArch64  => { 
853873                generated_asm. push_str ( "    ldr " ) ; 
854-                 reg. emit ( generated_asm,  InlineAsmArch :: AArch64 ,  None ) . unwrap ( ) ; 
874+                 match  reg { 
875+                     InlineAsmReg :: AArch64 ( reg)  if  reg. vreg_index ( ) . is_some ( )  => { 
876+                         // rustc emits v0 rather than q0 
877+                         reg. emit ( generated_asm,  InlineAsmArch :: AArch64 ,  Some ( 'q' ) ) . unwrap ( ) 
878+                     } 
879+                     _ => reg. emit ( generated_asm,  InlineAsmArch :: AArch64 ,  None ) . unwrap ( ) , 
880+                 } 
855881                writeln ! ( generated_asm,  ", [x19, 0x{:x}]" ,  offset. bytes( ) ) . unwrap ( ) ; 
856882            } 
857883            InlineAsmArch :: RiscV64  => { 
0 commit comments