1
1
use super :: intrinsic:: LoongArchIntrinsicType ;
2
2
use crate :: common:: cli:: Language ;
3
- <<<<<<< HEAD
4
- =======
5
3
use crate :: common:: intrinsic_helpers:: Sign ;
6
- >>>>>>> b094de07 ( chenj )
7
4
use crate :: common:: intrinsic_helpers:: { IntrinsicType , IntrinsicTypeDefinition , TypeKind } ;
8
5
9
6
impl IntrinsicTypeDefinition for LoongArchIntrinsicType {
@@ -32,42 +29,37 @@ impl LoongArchIntrinsicType {
32
29
/// Accepts X, Y and Z.
33
30
/// Returns a `LoongArchType`
34
31
pub fn from_values ( asm_fmt : & String , data_type : & String ) -> Result < Self , String > {
35
- let bit_len = match data_type. as_str ( ) {
36
- "A16QI " => Some ( 8 ) ,
37
- "AM16QI" => Some ( 8 ) ,
38
- "V16QI" => Some ( 8 ) ,
39
- "V32QI" => Some ( 8 ) ,
40
- "A32QI" => Some ( 8 ) ,
41
- "AM32QI" => Some ( 8 ) ,
42
- "V8HI" => Some ( 16 ) ,
43
- "V16HI" => Some ( 16 ) ,
44
- "V4SI" => Some ( 32 ) ,
45
- "V8SI" => Some ( 32 ) ,
46
- "V2DI" => Some ( 64 ) ,
47
- "V4DI" => Some ( 64 ) ,
48
- "UV16QI" => Some ( 8 ) ,
49
- "UV32QI" => Some ( 8 ) ,
50
- "UV8HI" => Some ( 16 ) ,
51
- "UV16HI" => Some ( 16 ) ,
52
- "UV4SI" => Some ( 32 ) ,
53
- "UV8SI" => Some ( 32 ) ,
54
- "UV2DI" => Some ( 64 ) ,
55
- "UV4DI" => Some ( 64 ) ,
56
- "V4SF" => Some ( 32 ) ,
57
- "V8SF" => Some ( 32 ) ,
58
- "V2DF" => Some ( 64 ) ,
59
- "V4DF" => Some ( 64 ) ,
60
- "SI" | "DI" | "USI" | "UDI" | "UQI" | "QI" | "CVPOINTER" | "HI" => None ,
32
+ let ( bit_len, vec_len, type_kind) = match data_type. as_str ( ) {
33
+ "A16QI" => ( Some ( 8 ) , Some ( 16 ) , TypeKind :: Int ( Sign :: Signed ) ) ,
34
+ "AM16QI" => ( Some ( 8 ) , Some ( 16 ) , TypeKind :: Int ( Sign :: Signed ) ) ,
35
+ "V16QI" => ( Some ( 8 ) , Some ( 16 ) , TypeKind :: Int ( Sign :: Signed ) ) ,
36
+ "V32QI" => ( Some ( 8 ) , Some ( 32 ) , TypeKind :: Int ( Sign :: Signed ) ) ,
37
+ "A32QI" => ( Some ( 8 ) , Some ( 32 ) , TypeKind :: Int ( Sign :: Signed ) ) ,
38
+ "AM32QI" => ( Some ( 8 ) , Some ( 32 ) , TypeKind :: Int ( Sign :: Signed ) ) ,
39
+ "V8HI" => ( Some ( 16 ) , Some ( 8 ) , TypeKind :: Int ( Sign :: Signed ) ) ,
40
+ "V16HI" => ( Some ( 16 ) , Some ( 16 ) , TypeKind :: Int ( Sign :: Signed ) ) ,
41
+ "V4SI" => ( Some ( 32 ) , Some ( 4 ) , TypeKind :: Int ( Sign :: Signed ) ) ,
42
+ "V8SI" => ( Some ( 32 ) , Some ( 8 ) , TypeKind :: Int ( Sign :: Signed ) ) ,
43
+ "V2DI" => ( Some ( 64 ) , Some ( 2 ) , TypeKind :: Int ( Sign :: Signed ) ) ,
44
+ "V4DI" => ( Some ( 64 ) , Some ( 4 ) , TypeKind :: Int ( Sign :: Signed ) ) ,
45
+ "UV16QI" => ( Some ( 8 ) , Some ( 16 ) , TypeKind :: Int ( Sign :: Unsigned ) ) ,
46
+ "UV32QI" => ( Some ( 8 ) , Some ( 32 ) , TypeKind :: Int ( Sign :: Unsigned ) ) ,
47
+ "UV8HI" => ( Some ( 16 ) , Some ( 8 ) , TypeKind :: Int ( Sign :: Unsigned ) ) ,
48
+ "UV16HI" => ( Some ( 16 ) , Some ( 16 ) , TypeKind :: Int ( Sign :: Unsigned ) ) ,
49
+ "UV4SI" => ( Some ( 32 ) , Some ( 4 ) , TypeKind :: Int ( Sign :: Unsigned ) ) ,
50
+ "UV8SI" => ( Some ( 32 ) , Some ( 8 ) , TypeKind :: Int ( Sign :: Unsigned ) ) ,
51
+ "UV2DI" => ( Some ( 64 ) , Some ( 2 ) , TypeKind :: Int ( Sign :: Unsigned ) ) ,
52
+ "UV4DI" => ( Some ( 64 ) , Some ( 4 ) , TypeKind :: Int ( Sign :: Unsigned ) ) ,
53
+ "V4SF" => ( Some ( 32 ) , Some ( 4 ) , TypeKind :: Float ) ,
54
+ "V8SF" => ( Some ( 32 ) , Some ( 8 ) , TypeKind :: Float ) ,
55
+ "V2DF" => ( Some ( 64 ) , Some ( 2 ) , TypeKind :: Float ) ,
56
+ "V4DF" => ( Some ( 64 ) , Some ( 4 ) , TypeKind :: Float ) ,
57
+ "SI" | "DI" | "USI" | "UDI" | "UQI" | "QI" | "CVPOINTER" | "HI" => {
58
+ ( None , None , TypeKind :: Int ( Sign :: Signed ) )
59
+ }
61
60
_ => panic ! ( "unknown type {data_type} with ASM {asm_fmt}" ) ,
62
61
} ;
63
62
64
- let vec_len = match data_type. as_str( ) {
65
- "SI" | "DI" | "USI" | "UDI" | "UQI" | "QI" | "HI" | => None ,
66
- "V32QI" | "V16HI" | "V8SI" | "V4DI" | "UV32QI" | "UV16HI" | "UV8SI" | "UV4DI"
67
- | "V8SF" | "V4DF" => Some ( 4 ) ,
68
- _ => Some ( 2 ) ,
69
- } ;
70
-
71
63
Ok ( LoongArchIntrinsicType {
72
64
data : IntrinsicType {
73
65
constant : false ,
@@ -76,8 +68,8 @@ impl LoongArchIntrinsicType {
76
68
kind : TypeKind :: Mask ,
77
69
bit_len,
78
70
vec_len,
79
- simd_len : None
80
- }
71
+ simd_len : None ,
72
+ } ,
81
73
} )
82
74
}
83
75
}
0 commit comments