@@ -107,7 +107,7 @@ enum ConstraintOrRegister {
107107
108108
109109impl < ' a , ' gcc , ' tcx > AsmBuilderMethods < ' tcx > for Builder < ' a , ' gcc , ' tcx > {
110- fn codegen_inline_asm ( & mut self , template : & [ InlineAsmTemplatePiece ] , rust_operands : & [ InlineAsmOperandRef < ' tcx , Self > ] , options : InlineAsmOptions , span : & [ Span ] , _instance : Instance < ' _ > , _dest_catch_funclet : Option < ( Self :: BasicBlock , Self :: BasicBlock , Option < & Self :: Funclet > ) > ) {
110+ fn codegen_inline_asm ( & mut self , template : & [ InlineAsmTemplatePiece ] , rust_operands : & [ InlineAsmOperandRef < ' tcx , Self > ] , options : InlineAsmOptions , span : & [ Span ] , instance : Instance < ' _ > , _dest_catch_funclet : Option < ( Self :: BasicBlock , Self :: BasicBlock , Option < & Self :: Funclet > ) > ) {
111111 if options. contains ( InlineAsmOptions :: MAY_UNWIND ) {
112112 self . sess ( )
113113 . create_err ( UnwindingInlineAsm { span : span[ 0 ] } )
@@ -173,7 +173,7 @@ impl<'a, 'gcc, 'tcx> AsmBuilderMethods<'tcx> for Builder<'a, 'gcc, 'tcx> {
173173 let is_target_supported = reg. reg_class ( ) . supported_types ( asm_arch) . iter ( )
174174 . any ( |& ( _, feature) | {
175175 if let Some ( feature) = feature {
176- self . tcx . sess . target_features . contains ( & feature)
176+ self . tcx . asm_target_features ( instance . def_id ( ) ) . contains ( & feature)
177177 } else {
178178 true // Register class is unconditionally supported
179179 }
@@ -593,6 +593,8 @@ fn reg_to_gcc(reg: InlineAsmRegOrRegClass) -> ConstraintOrRegister {
593593 InlineAsmRegClass :: M68k ( M68kInlineAsmRegClass :: reg) => "r" ,
594594 InlineAsmRegClass :: M68k ( M68kInlineAsmRegClass :: reg_addr) => "a" ,
595595 InlineAsmRegClass :: M68k ( M68kInlineAsmRegClass :: reg_data) => "d" ,
596+ InlineAsmRegClass :: CSKY ( CSKYInlineAsmRegClass :: reg) => "r" ,
597+ InlineAsmRegClass :: CSKY ( CSKYInlineAsmRegClass :: freg) => "f" ,
596598 InlineAsmRegClass :: Mips ( MipsInlineAsmRegClass :: reg) => "d" , // more specific than "r"
597599 InlineAsmRegClass :: Mips ( MipsInlineAsmRegClass :: freg) => "f" ,
598600 InlineAsmRegClass :: Msp430 ( Msp430InlineAsmRegClass :: reg) => "r" ,
@@ -669,6 +671,8 @@ fn dummy_output_type<'gcc, 'tcx>(cx: &CodegenCx<'gcc, 'tcx>, reg: InlineAsmRegCl
669671 InlineAsmRegClass :: M68k ( M68kInlineAsmRegClass :: reg) => cx. type_i32 ( ) ,
670672 InlineAsmRegClass :: M68k ( M68kInlineAsmRegClass :: reg_addr) => cx. type_i32 ( ) ,
671673 InlineAsmRegClass :: M68k ( M68kInlineAsmRegClass :: reg_data) => cx. type_i32 ( ) ,
674+ InlineAsmRegClass :: CSKY ( CSKYInlineAsmRegClass :: reg) => cx. type_i32 ( ) ,
675+ InlineAsmRegClass :: CSKY ( CSKYInlineAsmRegClass :: freg) => cx. type_f32 ( ) ,
672676 InlineAsmRegClass :: Mips ( MipsInlineAsmRegClass :: reg) => cx. type_i32 ( ) ,
673677 InlineAsmRegClass :: Mips ( MipsInlineAsmRegClass :: freg) => cx. type_f32 ( ) ,
674678 InlineAsmRegClass :: Msp430 ( _) => unimplemented ! ( ) ,
@@ -856,6 +860,7 @@ fn modifier_to_gcc(arch: InlineAsmArch, reg: InlineAsmRegClass, modifier: Option
856860 InlineAsmRegClass :: S390x ( _) => None ,
857861 InlineAsmRegClass :: Msp430 ( _) => None ,
858862 InlineAsmRegClass :: M68k ( _) => None ,
863+ InlineAsmRegClass :: CSKY ( _) => None ,
859864 InlineAsmRegClass :: SpirV ( SpirVInlineAsmRegClass :: reg) => {
860865 bug ! ( "LLVM backend does not support SPIR-V" )
861866 }
0 commit comments