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)