comparison gcc/config/arm/neon.ml @ 55:77e2b8dfacca gcc-4.4.5

update it from 4.4.3 to 4.5.0
author ryoma <e075725@ie.u-ryukyu.ac.jp>
date Fri, 12 Feb 2010 23:39:51 +0900
parents a06113de4d67
children b7f97abdc517
comparison
equal deleted inserted replaced
52:c156f1bd5cd9 55:77e2b8dfacca
48 | T_poly8 | T_poly16 48 | T_poly8 | T_poly16
49 | T_float32 | T_arrayof of int * vectype 49 | T_float32 | T_arrayof of int * vectype
50 | T_ptrto of vectype | T_const of vectype 50 | T_ptrto of vectype | T_const of vectype
51 | T_void | T_intQI 51 | T_void | T_intQI
52 | T_intHI | T_intSI 52 | T_intHI | T_intSI
53 | T_intDI 53 | T_intDI | T_floatSF
54 54
55 (* The meanings of the following are: 55 (* The meanings of the following are:
56 TImode : "Tetra", two registers (four words). 56 TImode : "Tetra", two registers (four words).
57 EImode : "hExa", three registers (six words). 57 EImode : "hExa", three registers (six words).
58 OImode : "Octa", four registers (eight words). 58 OImode : "Octa", four registers (eight words).
66 | PtrTo of shape_elt | CstPtrTo of shape_elt 66 | PtrTo of shape_elt | CstPtrTo of shape_elt
67 (* These next ones are used only in the test generator. *) 67 (* These next ones are used only in the test generator. *)
68 | Element_of_dreg (* Used for "lane" variants. *) 68 | Element_of_dreg (* Used for "lane" variants. *)
69 | Element_of_qreg (* Likewise. *) 69 | Element_of_qreg (* Likewise. *)
70 | All_elements_of_dreg (* Used for "dup" variants. *) 70 | All_elements_of_dreg (* Used for "dup" variants. *)
71 | Alternatives of shape_elt list (* Used for multiple valid operands *)
71 72
72 type shape_form = All of int * shape_elt 73 type shape_form = All of int * shape_elt
73 | Long 74 | Long
74 | Long_noreg of shape_elt 75 | Long_noreg of shape_elt
75 | Wide 76 | Wide
1006 hard for the test generator at this time. *) 1007 hard for the test generator at this time. *)
1007 Use_operands [| Dreg; Corereg |], "vcreate", create_vector, 1008 Use_operands [| Dreg; Corereg |], "vcreate", create_vector,
1008 pf_su_8_64; 1009 pf_su_8_64;
1009 1010
1010 (* Set all lanes to the same value. *) 1011 (* Set all lanes to the same value. *)
1011 Vdup_n, [], 1012 Vdup_n,
1013 [Disassembles_as [Use_operands [| Dreg;
1014 Alternatives [ Corereg;
1015 Element_of_dreg ] |]]],
1012 Use_operands [| Dreg; Corereg |], "vdup_n", bits_1, 1016 Use_operands [| Dreg; Corereg |], "vdup_n", bits_1,
1013 pf_su_8_32; 1017 pf_su_8_32;
1014 Vdup_n, 1018 Vdup_n,
1015 [Instruction_name ["vmov"]; 1019 [Instruction_name ["vmov"];
1016 Disassembles_as [Use_operands [| Dreg; Corereg; Corereg |]]], 1020 Disassembles_as [Use_operands [| Dreg; Corereg; Corereg |]]],
1017 Use_operands [| Dreg; Corereg |], "vdup_n", notype_1, 1021 Use_operands [| Dreg; Corereg |], "vdup_n", notype_1,
1018 [S64; U64]; 1022 [S64; U64];
1019 Vdup_n, [], 1023 Vdup_n,
1024 [Disassembles_as [Use_operands [| Qreg;
1025 Alternatives [ Corereg;
1026 Element_of_dreg ] |]]],
1020 Use_operands [| Qreg; Corereg |], "vdupQ_n", bits_1, 1027 Use_operands [| Qreg; Corereg |], "vdupQ_n", bits_1,
1021 pf_su_8_32; 1028 pf_su_8_32;
1022 Vdup_n, 1029 Vdup_n,
1023 [Instruction_name ["vmov"]; 1030 [Instruction_name ["vmov"];
1024 Disassembles_as [Use_operands [| Dreg; Corereg; Corereg |]; 1031 Disassembles_as [Use_operands [| Dreg; Corereg; Corereg |];
1026 Use_operands [| Qreg; Corereg |], "vdupQ_n", notype_1, 1033 Use_operands [| Qreg; Corereg |], "vdupQ_n", notype_1,
1027 [S64; U64]; 1034 [S64; U64];
1028 1035
1029 (* These are just aliases for the above. *) 1036 (* These are just aliases for the above. *)
1030 Vmov_n, 1037 Vmov_n,
1031 [Builtin_name "vdup_n"], 1038 [Builtin_name "vdup_n";
1039 Disassembles_as [Use_operands [| Dreg;
1040 Alternatives [ Corereg;
1041 Element_of_dreg ] |]]],
1032 Use_operands [| Dreg; Corereg |], 1042 Use_operands [| Dreg; Corereg |],
1033 "vmov_n", bits_1, pf_su_8_32; 1043 "vmov_n", bits_1, pf_su_8_32;
1034 Vmov_n, 1044 Vmov_n,
1035 [Builtin_name "vdup_n"; 1045 [Builtin_name "vdup_n";
1036 Instruction_name ["vmov"]; 1046 Instruction_name ["vmov"];
1037 Disassembles_as [Use_operands [| Dreg; Corereg; Corereg |]]], 1047 Disassembles_as [Use_operands [| Dreg; Corereg; Corereg |]]],
1038 Use_operands [| Dreg; Corereg |], 1048 Use_operands [| Dreg; Corereg |],
1039 "vmov_n", notype_1, [S64; U64]; 1049 "vmov_n", notype_1, [S64; U64];
1040 Vmov_n, 1050 Vmov_n,
1041 [Builtin_name "vdupQ_n"], 1051 [Builtin_name "vdupQ_n";
1052 Disassembles_as [Use_operands [| Qreg;
1053 Alternatives [ Corereg;
1054 Element_of_dreg ] |]]],
1042 Use_operands [| Qreg; Corereg |], 1055 Use_operands [| Qreg; Corereg |],
1043 "vmovQ_n", bits_1, pf_su_8_32; 1056 "vmovQ_n", bits_1, pf_su_8_32;
1044 Vmov_n, 1057 Vmov_n,
1045 [Builtin_name "vdupQ_n"; 1058 [Builtin_name "vdupQ_n";
1046 Instruction_name ["vmov"]; 1059 Instruction_name ["vmov"];
1691 | T_void -> "void" 1704 | T_void -> "void"
1692 | T_intQI -> "__builtin_neon_qi" 1705 | T_intQI -> "__builtin_neon_qi"
1693 | T_intHI -> "__builtin_neon_hi" 1706 | T_intHI -> "__builtin_neon_hi"
1694 | T_intSI -> "__builtin_neon_si" 1707 | T_intSI -> "__builtin_neon_si"
1695 | T_intDI -> "__builtin_neon_di" 1708 | T_intDI -> "__builtin_neon_di"
1709 | T_floatSF -> "__builtin_neon_sf"
1696 | T_arrayof (num, base) -> 1710 | T_arrayof (num, base) ->
1697 let basename = name (fun x -> x) base in 1711 let basename = name (fun x -> x) base in
1698 affix (Printf.sprintf "%sx%d" basename num) 1712 affix (Printf.sprintf "%sx%d" basename num)
1699 | T_ptrto x -> 1713 | T_ptrto x ->
1700 let basename = name affix x in 1714 let basename = name affix x in