@@ -107,26 +107,10 @@ enum ConstraintOrRegister {
107107
108108
109109impl < ' a , ' gcc , ' tcx > AsmBuilderMethods < ' tcx > for Builder < ' a , ' gcc , ' tcx > {
110- fn codegen_llvm_inline_asm ( & mut self , ia : & LlvmInlineAsmInner , outputs : Vec < PlaceRef < ' tcx , RValue < ' gcc > > > , inputs : Vec < RValue < ' gcc > > , span : Span ) -> bool {
111- if ia. asm . as_str ( ) . is_empty ( ) && outputs. is_empty ( ) {
112- // TODO(@Commeownist): there's one use of `llvm_asm` in rustc sysroot we can't get rid of just yet.
113- // Fortunately, it's used as a simple black box to make sure that inputs are not optimized away.
114- // Let's just emulate it.
115- let block = self . llbb ( ) ;
116- let extended_asm = block. add_extended_asm ( None , "" ) ;
117- for input in inputs {
118- extended_asm. add_input_operand ( None , "r" , input) ;
119- }
120- extended_asm. add_clobber ( "memory" ) ;
121- extended_asm. set_volatile_flag ( true ) ;
122- }
123- else {
124- // TODO(@Commeownist): switch to `struct_span_err_with_code`
125- // once we get this merged into rustc
126- self . sess ( ) . struct_span_err ( span, "GCC backend does not support `llvm_asm!`" )
127- . help ( "consider using the `asm!` macro instead" )
128- . emit ( ) ;
129- }
110+ fn codegen_llvm_inline_asm ( & mut self , _ia : & LlvmInlineAsmInner , _outputs : Vec < PlaceRef < ' tcx , RValue < ' gcc > > > , _inputs : Vec < RValue < ' gcc > > , span : Span ) -> bool {
111+ self . sess ( ) . struct_span_err ( span, "GCC backend does not support `llvm_asm!`" )
112+ . help ( "consider using the `asm!` macro instead" )
113+ . emit ( ) ;
130114
131115 // We return `true` even if we've failed to generate the asm
132116 // because we want to suppress the "malformed inline assembly" error
@@ -579,6 +563,10 @@ fn reg_to_gcc(reg: InlineAsmRegOrRegClass) -> ConstraintOrRegister {
579563 InlineAsmRegClass :: PowerPC ( PowerPCInlineAsmRegClass :: reg) => unimplemented ! ( ) ,
580564 InlineAsmRegClass :: PowerPC ( PowerPCInlineAsmRegClass :: reg_nonzero) => unimplemented ! ( ) ,
581565 InlineAsmRegClass :: PowerPC ( PowerPCInlineAsmRegClass :: freg) => unimplemented ! ( ) ,
566+ InlineAsmRegClass :: PowerPC ( PowerPCInlineAsmRegClass :: cr)
567+ | InlineAsmRegClass :: PowerPC ( PowerPCInlineAsmRegClass :: xer) => {
568+ unreachable ! ( "clobber-only" )
569+ } ,
582570 InlineAsmRegClass :: RiscV ( RiscVInlineAsmRegClass :: reg) => unimplemented ! ( ) ,
583571 InlineAsmRegClass :: RiscV ( RiscVInlineAsmRegClass :: freg) => unimplemented ! ( ) ,
584572 InlineAsmRegClass :: RiscV ( RiscVInlineAsmRegClass :: vreg) => unimplemented ! ( ) ,
@@ -596,6 +584,8 @@ fn reg_to_gcc(reg: InlineAsmRegOrRegClass) -> ConstraintOrRegister {
596584 InlineAsmRegClass :: SpirV ( SpirVInlineAsmRegClass :: reg) => {
597585 bug ! ( "GCC backend does not support SPIR-V" )
598586 }
587+ InlineAsmRegClass :: S390x ( S390xInlineAsmRegClass :: reg) => unimplemented ! ( ) ,
588+ InlineAsmRegClass :: S390x ( S390xInlineAsmRegClass :: freg) => unimplemented ! ( ) ,
599589 InlineAsmRegClass :: Err => unreachable ! ( ) ,
600590 }
601591 } ;
@@ -635,6 +625,10 @@ fn dummy_output_type<'gcc, 'tcx>(cx: &CodegenCx<'gcc, 'tcx>, reg: InlineAsmRegCl
635625 InlineAsmRegClass :: PowerPC ( PowerPCInlineAsmRegClass :: reg) => cx. type_i32 ( ) ,
636626 InlineAsmRegClass :: PowerPC ( PowerPCInlineAsmRegClass :: reg_nonzero) => cx. type_i32 ( ) ,
637627 InlineAsmRegClass :: PowerPC ( PowerPCInlineAsmRegClass :: freg) => cx. type_f64 ( ) ,
628+ InlineAsmRegClass :: PowerPC ( PowerPCInlineAsmRegClass :: cr)
629+ | InlineAsmRegClass :: PowerPC ( PowerPCInlineAsmRegClass :: xer) => {
630+ unreachable ! ( "clobber-only" )
631+ } ,
638632 InlineAsmRegClass :: RiscV ( RiscVInlineAsmRegClass :: reg) => cx. type_i32 ( ) ,
639633 InlineAsmRegClass :: RiscV ( RiscVInlineAsmRegClass :: freg) => cx. type_f32 ( ) ,
640634 InlineAsmRegClass :: RiscV ( RiscVInlineAsmRegClass :: vreg) => cx. type_f32 ( ) ,
@@ -651,6 +645,8 @@ fn dummy_output_type<'gcc, 'tcx>(cx: &CodegenCx<'gcc, 'tcx>, reg: InlineAsmRegCl
651645 InlineAsmRegClass :: SpirV ( SpirVInlineAsmRegClass :: reg) => {
652646 bug ! ( "LLVM backend does not support SPIR-V" )
653647 } ,
648+ InlineAsmRegClass :: S390x ( S390xInlineAsmRegClass :: reg) => cx. type_i32 ( ) ,
649+ InlineAsmRegClass :: S390x ( S390xInlineAsmRegClass :: freg) => cx. type_f64 ( ) ,
654650 InlineAsmRegClass :: Err => unreachable ! ( ) ,
655651 }
656652}
@@ -765,6 +761,8 @@ fn modifier_to_gcc(arch: InlineAsmArch, reg: InlineAsmRegClass, modifier: Option
765761 InlineAsmRegClass :: SpirV ( SpirVInlineAsmRegClass :: reg) => {
766762 bug ! ( "LLVM backend does not support SPIR-V" )
767763 } ,
764+ InlineAsmRegClass :: S390x ( S390xInlineAsmRegClass :: reg) => unimplemented ! ( ) ,
765+ InlineAsmRegClass :: S390x ( S390xInlineAsmRegClass :: freg) => unimplemented ! ( ) ,
768766 InlineAsmRegClass :: Err => unreachable ! ( ) ,
769767 }
770768}
0 commit comments