@@ -107,7 +107,7 @@ enum ConstraintOrRegister {
107
107
108
108
109
109
impl < ' 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 > ) > ) {
111
111
if options. contains ( InlineAsmOptions :: MAY_UNWIND ) {
112
112
self . sess ( )
113
113
. create_err ( UnwindingInlineAsm { span : span[ 0 ] } )
@@ -173,7 +173,7 @@ impl<'a, 'gcc, 'tcx> AsmBuilderMethods<'tcx> for Builder<'a, 'gcc, 'tcx> {
173
173
let is_target_supported = reg. reg_class ( ) . supported_types ( asm_arch) . iter ( )
174
174
. any ( |& ( _, feature) | {
175
175
if let Some ( feature) = feature {
176
- self . tcx . sess . target_features . contains ( & feature)
176
+ self . tcx . asm_target_features ( instance . def_id ( ) ) . contains ( & feature)
177
177
} else {
178
178
true // Register class is unconditionally supported
179
179
}
@@ -593,6 +593,8 @@ fn reg_to_gcc(reg: InlineAsmRegOrRegClass) -> ConstraintOrRegister {
593
593
InlineAsmRegClass :: M68k ( M68kInlineAsmRegClass :: reg) => "r" ,
594
594
InlineAsmRegClass :: M68k ( M68kInlineAsmRegClass :: reg_addr) => "a" ,
595
595
InlineAsmRegClass :: M68k ( M68kInlineAsmRegClass :: reg_data) => "d" ,
596
+ InlineAsmRegClass :: CSKY ( CSKYInlineAsmRegClass :: reg) => "r" ,
597
+ InlineAsmRegClass :: CSKY ( CSKYInlineAsmRegClass :: freg) => "f" ,
596
598
InlineAsmRegClass :: Mips ( MipsInlineAsmRegClass :: reg) => "d" , // more specific than "r"
597
599
InlineAsmRegClass :: Mips ( MipsInlineAsmRegClass :: freg) => "f" ,
598
600
InlineAsmRegClass :: Msp430 ( Msp430InlineAsmRegClass :: reg) => "r" ,
@@ -669,6 +671,8 @@ fn dummy_output_type<'gcc, 'tcx>(cx: &CodegenCx<'gcc, 'tcx>, reg: InlineAsmRegCl
669
671
InlineAsmRegClass :: M68k ( M68kInlineAsmRegClass :: reg) => cx. type_i32 ( ) ,
670
672
InlineAsmRegClass :: M68k ( M68kInlineAsmRegClass :: reg_addr) => cx. type_i32 ( ) ,
671
673
InlineAsmRegClass :: M68k ( M68kInlineAsmRegClass :: reg_data) => cx. type_i32 ( ) ,
674
+ InlineAsmRegClass :: CSKY ( CSKYInlineAsmRegClass :: reg) => cx. type_i32 ( ) ,
675
+ InlineAsmRegClass :: CSKY ( CSKYInlineAsmRegClass :: freg) => cx. type_f32 ( ) ,
672
676
InlineAsmRegClass :: Mips ( MipsInlineAsmRegClass :: reg) => cx. type_i32 ( ) ,
673
677
InlineAsmRegClass :: Mips ( MipsInlineAsmRegClass :: freg) => cx. type_f32 ( ) ,
674
678
InlineAsmRegClass :: Msp430 ( _) => unimplemented ! ( ) ,
@@ -856,6 +860,7 @@ fn modifier_to_gcc(arch: InlineAsmArch, reg: InlineAsmRegClass, modifier: Option
856
860
InlineAsmRegClass :: S390x ( _) => None ,
857
861
InlineAsmRegClass :: Msp430 ( _) => None ,
858
862
InlineAsmRegClass :: M68k ( _) => None ,
863
+ InlineAsmRegClass :: CSKY ( _) => None ,
859
864
InlineAsmRegClass :: SpirV ( SpirVInlineAsmRegClass :: reg) => {
860
865
bug ! ( "LLVM backend does not support SPIR-V" )
861
866
}
0 commit comments