@@ -1020,6 +1020,26 @@ fn llvm_fixup_input<'ll, 'tcx>(
1020
1020
value
1021
1021
}
1022
1022
}
1023
+ (
1024
+ InlineAsmRegClass :: Arm (
1025
+ ArmInlineAsmRegClass :: dreg
1026
+ | ArmInlineAsmRegClass :: dreg_low8
1027
+ | ArmInlineAsmRegClass :: dreg_low16,
1028
+ ) ,
1029
+ Abi :: Vector { element, count : 4 } ,
1030
+ ) if element. primitive ( ) == Primitive :: Float ( Float :: F16 ) => {
1031
+ bx. bitcast ( value, bx. type_f64 ( ) )
1032
+ }
1033
+ (
1034
+ InlineAsmRegClass :: Arm (
1035
+ ArmInlineAsmRegClass :: qreg
1036
+ | ArmInlineAsmRegClass :: qreg_low4
1037
+ | ArmInlineAsmRegClass :: qreg_low8,
1038
+ ) ,
1039
+ Abi :: Vector { element, count : 8 } ,
1040
+ ) if element. primitive ( ) == Primitive :: Float ( Float :: F16 ) => {
1041
+ bx. bitcast ( value, bx. type_vector ( bx. type_i16 ( ) , 8 ) )
1042
+ }
1023
1043
( InlineAsmRegClass :: Mips ( MipsInlineAsmRegClass :: reg) , Abi :: Scalar ( s) ) => {
1024
1044
match s. primitive ( ) {
1025
1045
// MIPS only supports register-length arithmetics.
@@ -1130,6 +1150,26 @@ fn llvm_fixup_output<'ll, 'tcx>(
1130
1150
value
1131
1151
}
1132
1152
}
1153
+ (
1154
+ InlineAsmRegClass :: Arm (
1155
+ ArmInlineAsmRegClass :: dreg
1156
+ | ArmInlineAsmRegClass :: dreg_low8
1157
+ | ArmInlineAsmRegClass :: dreg_low16,
1158
+ ) ,
1159
+ Abi :: Vector { element, count : 4 } ,
1160
+ ) if element. primitive ( ) == Primitive :: Float ( Float :: F16 ) => {
1161
+ bx. bitcast ( value, bx. type_vector ( bx. type_f16 ( ) , 4 ) )
1162
+ }
1163
+ (
1164
+ InlineAsmRegClass :: Arm (
1165
+ ArmInlineAsmRegClass :: qreg
1166
+ | ArmInlineAsmRegClass :: qreg_low4
1167
+ | ArmInlineAsmRegClass :: qreg_low8,
1168
+ ) ,
1169
+ Abi :: Vector { element, count : 8 } ,
1170
+ ) if element. primitive ( ) == Primitive :: Float ( Float :: F16 ) => {
1171
+ bx. bitcast ( value, bx. type_vector ( bx. type_f16 ( ) , 8 ) )
1172
+ }
1133
1173
( InlineAsmRegClass :: Mips ( MipsInlineAsmRegClass :: reg) , Abi :: Scalar ( s) ) => {
1134
1174
match s. primitive ( ) {
1135
1175
// MIPS only supports register-length arithmetics.
@@ -1233,6 +1273,24 @@ fn llvm_fixup_output_type<'ll, 'tcx>(
1233
1273
layout. llvm_type ( cx)
1234
1274
}
1235
1275
}
1276
+ (
1277
+ InlineAsmRegClass :: Arm (
1278
+ ArmInlineAsmRegClass :: dreg
1279
+ | ArmInlineAsmRegClass :: dreg_low8
1280
+ | ArmInlineAsmRegClass :: dreg_low16,
1281
+ ) ,
1282
+ Abi :: Vector { element, count : 4 } ,
1283
+ ) if element. primitive ( ) == Primitive :: Float ( Float :: F16 ) => cx. type_f64 ( ) ,
1284
+ (
1285
+ InlineAsmRegClass :: Arm (
1286
+ ArmInlineAsmRegClass :: qreg
1287
+ | ArmInlineAsmRegClass :: qreg_low4
1288
+ | ArmInlineAsmRegClass :: qreg_low8,
1289
+ ) ,
1290
+ Abi :: Vector { element, count : 8 } ,
1291
+ ) if element. primitive ( ) == Primitive :: Float ( Float :: F16 ) => {
1292
+ cx. type_vector ( cx. type_i16 ( ) , 8 )
1293
+ }
1236
1294
( InlineAsmRegClass :: Mips ( MipsInlineAsmRegClass :: reg) , Abi :: Scalar ( s) ) => {
1237
1295
match s. primitive ( ) {
1238
1296
// MIPS only supports register-length arithmetics.
0 commit comments