• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16/* Mapping between abstract maple machine IR and machine operation code of X86_64*/
17/* {mmir, mop} */
18DEFINE_MAPPING(abstract::MOP_undef, x64::MOP_begin)
19
20/* Mov */
21DEFINE_MAPPING(abstract::MOP_copy_ri_8,   x64::MOP_movb_i_r)
22DEFINE_MAPPING(abstract::MOP_copy_ri_16,  x64::MOP_movw_i_r)
23DEFINE_MAPPING(abstract::MOP_copy_ri_32,  x64::MOP_movl_i_r)
24DEFINE_MAPPING(abstract::MOP_copy_ri_64,  x64::MOP_movq_i_r)
25DEFINE_MAPPING(abstract::MOP_copy_rr_8,   x64::MOP_movb_r_r)
26DEFINE_MAPPING(abstract::MOP_copy_rr_16,  x64::MOP_movw_r_r)
27DEFINE_MAPPING(abstract::MOP_copy_rr_32,  x64::MOP_movl_r_r)
28DEFINE_MAPPING(abstract::MOP_copy_rr_64,  x64::MOP_movq_r_r)
29DEFINE_MAPPING(abstract::MOP_copy_ff_32,  x64::MOP_movfs_r_r)
30DEFINE_MAPPING(abstract::MOP_copy_ff_64,  x64::MOP_movfd_r_r)
31
32/* str/load */
33DEFINE_MAPPING(abstract::MOP_str_8,       x64::MOP_movb_r_m)
34DEFINE_MAPPING(abstract::MOP_str_16,      x64::MOP_movw_r_m)
35DEFINE_MAPPING(abstract::MOP_str_32,      x64::MOP_movl_r_m)
36DEFINE_MAPPING(abstract::MOP_str_64,      x64::MOP_movq_r_m)
37DEFINE_MAPPING(abstract::MOP_load_8,      x64::MOP_movb_m_r)
38DEFINE_MAPPING(abstract::MOP_load_16,     x64::MOP_movw_m_r)
39DEFINE_MAPPING(abstract::MOP_load_32,     x64::MOP_movl_m_r)
40DEFINE_MAPPING(abstract::MOP_load_64,     x64::MOP_movq_m_r)
41
42/* str/load floating point */
43DEFINE_MAPPING(abstract::MOP_str_f_64,    x64::MOP_movfd_r_m)
44DEFINE_MAPPING(abstract::MOP_load_f_64,   x64::MOP_movfd_m_r)
45DEFINE_MAPPING(abstract::MOP_str_f_32,    x64::MOP_movfs_r_m)
46DEFINE_MAPPING(abstract::MOP_load_f_32,   x64::MOP_movfs_m_r)
47
48/* shift -- shl/ashr/lshr */
49DEFINE_MAPPING(abstract::MOP_shl_8,       x64::MOP_shlb_r_r)
50DEFINE_MAPPING(abstract::MOP_shl_16,      x64::MOP_shlw_r_r)
51DEFINE_MAPPING(abstract::MOP_shl_32,      x64::MOP_shll_r_r)
52DEFINE_MAPPING(abstract::MOP_shl_64,      x64::MOP_shlq_r_r)
53DEFINE_MAPPING(abstract::MOP_ashr_8,      x64::MOP_sarb_r_r)
54DEFINE_MAPPING(abstract::MOP_ashr_16,     x64::MOP_sarw_r_r)
55DEFINE_MAPPING(abstract::MOP_ashr_32,     x64::MOP_sarl_r_r)
56DEFINE_MAPPING(abstract::MOP_ashr_64,     x64::MOP_sarq_r_r)
57DEFINE_MAPPING(abstract::MOP_lshr_8,      x64::MOP_shrb_r_r)
58DEFINE_MAPPING(abstract::MOP_lshr_16,     x64::MOP_shrw_r_r)
59DEFINE_MAPPING(abstract::MOP_lshr_32,     x64::MOP_shrl_r_r)
60DEFINE_MAPPING(abstract::MOP_lshr_64,     x64::MOP_shrq_r_r)
61
62/* BasicOp */
63DEFINE_MAPPING(abstract::MOP_and_8,       x64::MOP_andb_r_r)
64DEFINE_MAPPING(abstract::MOP_and_16,      x64::MOP_andw_r_r)
65DEFINE_MAPPING(abstract::MOP_and_32,      x64::MOP_andl_r_r)
66DEFINE_MAPPING(abstract::MOP_and_64,      x64::MOP_andq_r_r)
67DEFINE_MAPPING(abstract::MOP_or_8,        x64::MOP_orb_r_r)
68DEFINE_MAPPING(abstract::MOP_or_16,       x64::MOP_orw_r_r)
69DEFINE_MAPPING(abstract::MOP_or_32,       x64::MOP_orl_r_r)
70DEFINE_MAPPING(abstract::MOP_or_64,       x64::MOP_orq_r_r)
71DEFINE_MAPPING(abstract::MOP_xor_8,       x64::MOP_xorb_r_r)
72DEFINE_MAPPING(abstract::MOP_xor_16,      x64::MOP_xorw_r_r)
73DEFINE_MAPPING(abstract::MOP_xor_32,      x64::MOP_xorl_r_r)
74DEFINE_MAPPING(abstract::MOP_xor_64,      x64::MOP_xorq_r_r)
75DEFINE_MAPPING(abstract::MOP_add_8,       x64::MOP_addb_r_r)
76DEFINE_MAPPING(abstract::MOP_add_16,      x64::MOP_addw_r_r)
77DEFINE_MAPPING(abstract::MOP_add_32,      x64::MOP_addl_r_r)
78DEFINE_MAPPING(abstract::MOP_add_64,      x64::MOP_addq_r_r)
79DEFINE_MAPPING(abstract::MOP_sub_8,       x64::MOP_subb_r_r)
80DEFINE_MAPPING(abstract::MOP_sub_16,      x64::MOP_subw_r_r)
81DEFINE_MAPPING(abstract::MOP_sub_32,      x64::MOP_subl_r_r)
82DEFINE_MAPPING(abstract::MOP_sub_64,      x64::MOP_subq_r_r)
83DEFINE_MAPPING(abstract::MOP_add_f_32,    x64::MOP_adds_r_r)
84DEFINE_MAPPING(abstract::MOP_add_f_64,    x64::MOP_addd_r_r)
85DEFINE_MAPPING(abstract::MOP_sub_f_32,    x64::MOP_subs_r_r)
86DEFINE_MAPPING(abstract::MOP_sub_f_64,    x64::MOP_subd_r_r)
87DEFINE_MAPPING(abstract::MOP_sub_f_32,    x64::MOP_subs_r_r)
88DEFINE_MAPPING(abstract::MOP_and_f_64,    x64::MOP_andd_r_r)
89DEFINE_MAPPING(abstract::MOP_and_f_32,    x64::MOP_ands_r_r)
90
91/* UnaryOp */
92DEFINE_MAPPING(abstract::MOP_not_8,       x64::MOP_notb_r)
93DEFINE_MAPPING(abstract::MOP_not_16,      x64::MOP_notw_r)
94DEFINE_MAPPING(abstract::MOP_not_32,      x64::MOP_notl_r)
95DEFINE_MAPPING(abstract::MOP_not_64,      x64::MOP_notq_r)
96DEFINE_MAPPING(abstract::MOP_neg_8,       x64::MOP_negb_r)
97DEFINE_MAPPING(abstract::MOP_neg_16,      x64::MOP_negw_r)
98DEFINE_MAPPING(abstract::MOP_neg_32,      x64::MOP_negl_r)
99DEFINE_MAPPING(abstract::MOP_neg_64,      x64::MOP_negq_r)
100
101/* CvtOp */
102DEFINE_MAPPING(abstract::MOP_zext_rr_16_8,      x64::MOP_movzbw_r_r)
103DEFINE_MAPPING(abstract::MOP_sext_rr_16_8,      x64::MOP_movsbw_r_r)
104DEFINE_MAPPING(abstract::MOP_zext_rr_32_8,      x64::MOP_movzbl_r_r)
105DEFINE_MAPPING(abstract::MOP_sext_rr_32_8,      x64::MOP_movsbl_r_r)
106DEFINE_MAPPING(abstract::MOP_zext_rr_32_16,     x64::MOP_movzwl_r_r)
107DEFINE_MAPPING(abstract::MOP_sext_rr_32_16,     x64::MOP_movswl_r_r)
108DEFINE_MAPPING(abstract::MOP_zext_rr_64_8,      x64::MOP_movzbl_r_r)
109DEFINE_MAPPING(abstract::MOP_sext_rr_64_8,      x64::MOP_movsbq_r_r)
110DEFINE_MAPPING(abstract::MOP_zext_rr_64_16,     x64::MOP_movzwl_r_r)
111DEFINE_MAPPING(abstract::MOP_sext_rr_64_16,     x64::MOP_movswq_r_r)
112DEFINE_MAPPING(abstract::MOP_zext_rr_64_32,     x64::MOP_movl_r_r)
113DEFINE_MAPPING(abstract::MOP_sext_rr_64_32,     x64::MOP_movslq_r_r)
114
115/* Floating CvtOp int2float */
116DEFINE_MAPPING(abstract::MOP_cvt_f64_u64,    x64::MOP_cvtsi2sdq_r)
117DEFINE_MAPPING(abstract::MOP_cvt_f64_u32,    x64::MOP_cvtsi2sdq_r)
118DEFINE_MAPPING(abstract::MOP_cvt_f32_u64,    x64::MOP_cvtsi2ssq_r)
119DEFINE_MAPPING(abstract::MOP_cvt_f32_u32,    x64::MOP_cvtsi2ssq_r)
120DEFINE_MAPPING(abstract::MOP_cvt_f32_i64,    x64::MOP_cvtsi2ssq_r)
121DEFINE_MAPPING(abstract::MOP_cvt_f32_i32,    x64::MOP_cvtsi2ssl_r)
122DEFINE_MAPPING(abstract::MOP_cvt_f64_i64,    x64::MOP_cvtsi2sdq_r)
123DEFINE_MAPPING(abstract::MOP_cvt_f64_i32,    x64::MOP_cvtsi2sdl_r)
124
125/* Floating CvtOp float2int */
126DEFINE_MAPPING(abstract::MOP_cvt_u32_f32,    x64::MOP_cvttss2siq_r)
127DEFINE_MAPPING(abstract::MOP_cvt_u64_f64,    x64::MOP_cvttsd2siq_r)
128DEFINE_MAPPING(abstract::MOP_cvt_i32_f32,    x64::MOP_cvttss2sil_r)
129DEFINE_MAPPING(abstract::MOP_cvt_i64_f64,    x64::MOP_cvttsd2siq_r)
130DEFINE_MAPPING(abstract::MOP_cvt_i32_f64,    x64::MOP_cvttsd2sil_r)
131DEFINE_MAPPING(abstract::MOP_cvt_i32_f32,    x64::MOP_cvttss2sil_r)
132DEFINE_MAPPING(abstract::MOP_cvt_u32_f64,    x64::MOP_cvttsd2siq_r)
133DEFINE_MAPPING(abstract::MOP_cvt_u32_f32,    x64::MOP_cvttss2siq_r)
134
135/* Floating CvtOp float2float */
136DEFINE_MAPPING(abstract::MOP_cvt_ff_64_32,   x64::MOP_cvtss2sd_r)
137DEFINE_MAPPING(abstract::MOP_cvt_ff_32_64,   x64::MOP_cvtsd2ss_r)