18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* 28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Tiny Code Generator for QEMU 38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * 48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Copyright (c) 2008 Fabrice Bellard 58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * 68b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Permission is hereby granted, free of charge, to any person obtaining a copy 78b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * of this software and associated documentation files (the "Software"), to deal 88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * in the Software without restriction, including without limitation the rights 98b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * copies of the Software, and to permit persons to whom the Software is 118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * furnished to do so, subject to the following conditions: 128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * 138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * The above copyright notice and this permission notice shall be included in 148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * all copies or substantial portions of the Software. 158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * 168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * THE SOFTWARE. 238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project */ 248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "tcg.h" 258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint gen_new_label(void); 278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 28f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op1_i32(TCGOpcode opc, TCGv_i32 arg1) 295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opc_ptr++ = opc; 315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg1); 325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 34f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op1_i64(TCGOpcode opc, TCGv_i64 arg1) 358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *gen_opc_ptr++ = opc; 375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg1); 388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 40f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op1i(TCGOpcode opc, TCGArg arg1) 418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *gen_opc_ptr++ = opc; 438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *gen_opparam_ptr++ = arg1; 448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 46f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op2_i32(TCGOpcode opc, TCGv_i32 arg1, TCGv_i32 arg2) 475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opc_ptr++ = opc; 495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg1); 505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg2); 515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 53f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op2_i64(TCGOpcode opc, TCGv_i64 arg1, TCGv_i64 arg2) 548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *gen_opc_ptr++ = opc; 565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg1); 575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg2); 588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 60f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op2i_i32(TCGOpcode opc, TCGv_i32 arg1, TCGArg arg2) 618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *gen_opc_ptr++ = opc; 635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg1); 645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = arg2; 655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 67f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op2i_i64(TCGOpcode opc, TCGv_i64 arg1, TCGArg arg2) 685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opc_ptr++ = opc; 705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg1); 718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *gen_opparam_ptr++ = arg2; 728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 74f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op2ii(TCGOpcode opc, TCGArg arg1, TCGArg arg2) 758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *gen_opc_ptr++ = opc; 778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *gen_opparam_ptr++ = arg1; 788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *gen_opparam_ptr++ = arg2; 798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 81f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op3_i32(TCGOpcode opc, TCGv_i32 arg1, TCGv_i32 arg2, 825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 arg3) 838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *gen_opc_ptr++ = opc; 855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg1); 865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg2); 875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg3); 888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 90f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op3_i64(TCGOpcode opc, TCGv_i64 arg1, TCGv_i64 arg2, 915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 arg3) 928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *gen_opc_ptr++ = opc; 945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg1); 955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg2); 965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg3); 975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 99f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op3i_i32(TCGOpcode opc, TCGv_i32 arg1, 100f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner TCGv_i32 arg2, TCGArg arg3) 1015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opc_ptr++ = opc; 1035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg1); 1045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg2); 1058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *gen_opparam_ptr++ = arg3; 1068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 1078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 108f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op3i_i64(TCGOpcode opc, TCGv_i64 arg1, 109f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner TCGv_i64 arg2, TCGArg arg3) 1105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opc_ptr++ = opc; 1125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg1); 1135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg2); 1145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = arg3; 1155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 1165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 117f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_ldst_op_i32(TCGOpcode opc, TCGv_i32 val, 118f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner TCGv_ptr base, TCGArg offset) 1195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opc_ptr++ = opc; 1215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(val); 1225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_PTR(base); 1235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = offset; 1245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 1255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 126f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_ldst_op_i64(TCGOpcode opc, TCGv_i64 val, 127f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner TCGv_ptr base, TCGArg offset) 1285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opc_ptr++ = opc; 1305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(val); 1315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_PTR(base); 1325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = offset; 1335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 1345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 135f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_qemu_ldst_op_i64_i32(TCGOpcode opc, TCGv_i64 val, 136f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner TCGv_i32 addr, TCGArg mem_index) 1375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opc_ptr++ = opc; 1395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(val); 1405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(addr); 1415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = mem_index; 1425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 1435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 144f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_qemu_ldst_op_i64_i64(TCGOpcode opc, TCGv_i64 val, 145f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner TCGv_i64 addr, TCGArg mem_index) 1465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opc_ptr++ = opc; 1485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(val); 1495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(addr); 1505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = mem_index; 1515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 1525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 153f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op4_i32(TCGOpcode opc, TCGv_i32 arg1, TCGv_i32 arg2, 1545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 arg3, TCGv_i32 arg4) 1555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opc_ptr++ = opc; 1575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg1); 1585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg2); 1595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg3); 1605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg4); 1615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 1625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 163f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op4_i64(TCGOpcode opc, TCGv_i64 arg1, TCGv_i64 arg2, 1645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 arg3, TCGv_i64 arg4) 1655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opc_ptr++ = opc; 1675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg1); 1685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg2); 1695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg3); 1705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg4); 1715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 1725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 173f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op4i_i32(TCGOpcode opc, TCGv_i32 arg1, TCGv_i32 arg2, 1745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 arg3, TCGArg arg4) 1755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opc_ptr++ = opc; 1775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg1); 1785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg2); 1795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg3); 1805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = arg4; 1815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 1825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 183f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op4i_i64(TCGOpcode opc, TCGv_i64 arg1, TCGv_i64 arg2, 1845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 arg3, TCGArg arg4) 1858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *gen_opc_ptr++ = opc; 1875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg1); 1885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg2); 1895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg3); 1905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = arg4; 1918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 1928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 193f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op4ii_i32(TCGOpcode opc, TCGv_i32 arg1, TCGv_i32 arg2, 1945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGArg arg3, TCGArg arg4) 1958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *gen_opc_ptr++ = opc; 1975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg1); 1985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg2); 1995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = arg3; 2008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *gen_opparam_ptr++ = arg4; 2018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 2028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 203f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op4ii_i64(TCGOpcode opc, TCGv_i64 arg1, TCGv_i64 arg2, 2045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGArg arg3, TCGArg arg4) 2058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 2068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *gen_opc_ptr++ = opc; 2075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg1); 2085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg2); 2098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *gen_opparam_ptr++ = arg3; 2108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *gen_opparam_ptr++ = arg4; 2118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 2128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 213f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op5_i32(TCGOpcode opc, TCGv_i32 arg1, TCGv_i32 arg2, 2145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 arg3, TCGv_i32 arg4, TCGv_i32 arg5) 2155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 2165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opc_ptr++ = opc; 2175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg1); 2185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg2); 2195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg3); 2205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg4); 2215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg5); 2225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 2235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 224f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op5_i64(TCGOpcode opc, TCGv_i64 arg1, TCGv_i64 arg2, 2255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 arg3, TCGv_i64 arg4, TCGv_i64 arg5) 2268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 2278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *gen_opc_ptr++ = opc; 2285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg1); 2295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg2); 2305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg3); 2315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg4); 2325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg5); 2338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 2348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 235f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op5i_i32(TCGOpcode opc, TCGv_i32 arg1, TCGv_i32 arg2, 2365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 arg3, TCGv_i32 arg4, TCGArg arg5) 2378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 2388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *gen_opc_ptr++ = opc; 2395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg1); 2405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg2); 2415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg3); 2425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg4); 2438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *gen_opparam_ptr++ = arg5; 2448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 2458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 246f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op5i_i64(TCGOpcode opc, TCGv_i64 arg1, TCGv_i64 arg2, 2475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 arg3, TCGv_i64 arg4, TCGArg arg5) 2488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 2498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *gen_opc_ptr++ = opc; 2505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg1); 2515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg2); 2525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg3); 2535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg4); 2545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = arg5; 2555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 2565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 257f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op5ii_i32(TCGOpcode opc, TCGv_i32 arg1, 258f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner TCGv_i32 arg2, TCGv_i32 arg3, 259f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner TCGArg arg4, TCGArg arg5) 260f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner{ 261f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner *gen_opc_ptr++ = opc; 262f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg1); 263f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg2); 264f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg3); 265f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner *gen_opparam_ptr++ = arg4; 266f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner *gen_opparam_ptr++ = arg5; 267f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner} 268f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 269f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op5ii_i64(TCGOpcode opc, TCGv_i64 arg1, 270f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner TCGv_i64 arg2, TCGv_i64 arg3, 271f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner TCGArg arg4, TCGArg arg5) 272f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner{ 273f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner *gen_opc_ptr++ = opc; 274f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg1); 275f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg2); 276f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg3); 277f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner *gen_opparam_ptr++ = arg4; 278f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner *gen_opparam_ptr++ = arg5; 279f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner} 280f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 281f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op6_i32(TCGOpcode opc, TCGv_i32 arg1, TCGv_i32 arg2, 2825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 arg3, TCGv_i32 arg4, TCGv_i32 arg5, 2835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 arg6) 2845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 2855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opc_ptr++ = opc; 2865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg1); 2875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg2); 2885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg3); 2895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg4); 2905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg5); 2915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg6); 2928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 2938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 294f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op6_i64(TCGOpcode opc, TCGv_i64 arg1, TCGv_i64 arg2, 2955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 arg3, TCGv_i64 arg4, TCGv_i64 arg5, 2965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 arg6) 2978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 2988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *gen_opc_ptr++ = opc; 2995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg1); 3005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg2); 3015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg3); 3025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg4); 3035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg5); 3045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg6); 3055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 3065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 307f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op6i_i32(TCGOpcode opc, TCGv_i32 arg1, TCGv_i32 arg2, 308b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner TCGv_i32 arg3, TCGv_i32 arg4, 309b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner TCGv_i32 arg5, TCGArg arg6) 310b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner{ 311b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner *gen_opc_ptr++ = opc; 312b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg1); 313b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg2); 314b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg3); 315b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg4); 316b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg5); 317b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner *gen_opparam_ptr++ = arg6; 318b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner} 319b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner 320f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op6i_i64(TCGOpcode opc, TCGv_i64 arg1, TCGv_i64 arg2, 321b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner TCGv_i64 arg3, TCGv_i64 arg4, 322b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner TCGv_i64 arg5, TCGArg arg6) 323b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner{ 324b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner *gen_opc_ptr++ = opc; 325b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg1); 326b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg2); 327b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg3); 328b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg4); 329b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg5); 330b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner *gen_opparam_ptr++ = arg6; 331b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner} 332b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner 333f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op6ii_i32(TCGOpcode opc, TCGv_i32 arg1, 334f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner TCGv_i32 arg2, TCGv_i32 arg3, 335f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner TCGv_i32 arg4, TCGArg arg5, TCGArg arg6) 3365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 3375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opc_ptr++ = opc; 3385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg1); 3395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg2); 3405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg3); 3415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg4); 3425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = arg5; 3435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = arg6; 3445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 3455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 346f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_op6ii_i64(TCGOpcode opc, TCGv_i64 arg1, 347f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner TCGv_i64 arg2, TCGv_i64 arg3, 348f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner TCGv_i64 arg4, TCGArg arg5, TCGArg arg6) 3495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 3505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opc_ptr++ = opc; 3515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg1); 3525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg2); 3535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg3); 3545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg4); 3558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *gen_opparam_ptr++ = arg5; 3568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *gen_opparam_ptr++ = arg6; 3578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 3588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 3598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void gen_set_label(int n) 3608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 3618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_op1i(INDEX_op_set_label, n); 3628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 3638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 3648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_br(int label) 3658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 3668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_op1i(INDEX_op_br, label); 3678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 3688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 3695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_mov_i32(TCGv_i32 ret, TCGv_i32 arg) 3708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 3715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner if (!TCGV_EQUAL_I32(ret, arg)) 3725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i32(INDEX_op_mov_i32, ret, arg); 3738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 3748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 3755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_movi_i32(TCGv_i32 ret, int32_t arg) 3768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 3775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2i_i32(INDEX_op_movi_i32, ret, arg); 3788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 3798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 380f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner/* A version of dh_sizemask from def-helper.h that doesn't rely on 381f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner preprocessor magic. */ 382f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline int tcg_gen_sizemask(int n, int is_64bit, int is_signed) 383f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner{ 384f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner return (is_64bit << n*2) | (is_signed << (n*2 + 1)); 385f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner} 386f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 3878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* helper calls */ 3885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_helperN(void *func, int flags, int sizemask, 3895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGArg ret, int nargs, TCGArg *args) 3905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 3915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_ptr fn; 3925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner fn = tcg_const_ptr((tcg_target_long)func); 3935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_callN(&tcg_ctx, fn, flags, sizemask, ret, 3945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner nargs, args); 3955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_ptr(fn); 3965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 3978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 398f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner/* Note: Both tcg_gen_helper32() and tcg_gen_helper64() are currently 399f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner reserved for helpers in tcg-runtime.c. These helpers are all const 400f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner and pure, hence the call to tcg_gen_callN() with TCG_CALL_CONST | 401f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner TCG_CALL_PURE. This may need to be adjusted if these functions 402f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner start to be used with other helpers. */ 403f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_helper32(void *func, int sizemask, TCGv_i32 ret, 404f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner TCGv_i32 a, TCGv_i32 b) 405f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner{ 406f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner TCGv_ptr fn; 407f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner TCGArg args[2]; 408f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner fn = tcg_const_ptr((tcg_target_long)func); 409f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner args[0] = GET_TCGV_I32(a); 410f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner args[1] = GET_TCGV_I32(b); 411f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_callN(&tcg_ctx, fn, TCG_CALL_CONST | TCG_CALL_PURE, sizemask, 412f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner GET_TCGV_I32(ret), 2, args); 413f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_temp_free_ptr(fn); 414f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner} 415f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 416f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_helper64(void *func, int sizemask, TCGv_i64 ret, 4175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 a, TCGv_i64 b) 4188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 4195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_ptr fn; 4205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGArg args[2]; 4215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner fn = tcg_const_ptr((tcg_target_long)func); 4225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner args[0] = GET_TCGV_I64(a); 4235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner args[1] = GET_TCGV_I64(b); 424f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_callN(&tcg_ctx, fn, TCG_CALL_CONST | TCG_CALL_PURE, sizemask, 425f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner GET_TCGV_I64(ret), 2, args); 4265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_ptr(fn); 4278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 4288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 4298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* 32 bit ops */ 4308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 4315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld8u_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset) 4328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 4335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i32(INDEX_op_ld8u_i32, ret, arg2, offset); 4348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 4358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 4365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld8s_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset) 4378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 4385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i32(INDEX_op_ld8s_i32, ret, arg2, offset); 4398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 4408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 4415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld16u_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset) 4428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 4435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i32(INDEX_op_ld16u_i32, ret, arg2, offset); 4448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 4458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 4465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld16s_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset) 4478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 4485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i32(INDEX_op_ld16s_i32, ret, arg2, offset); 4498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 4508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 4515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset) 4528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 4535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i32(INDEX_op_ld_i32, ret, arg2, offset); 4548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 4558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 4565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st8_i32(TCGv_i32 arg1, TCGv_ptr arg2, tcg_target_long offset) 4578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 4585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i32(INDEX_op_st8_i32, arg1, arg2, offset); 4598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 4608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 4615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st16_i32(TCGv_i32 arg1, TCGv_ptr arg2, tcg_target_long offset) 4628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 4635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i32(INDEX_op_st16_i32, arg1, arg2, offset); 4648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 4658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 4665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st_i32(TCGv_i32 arg1, TCGv_ptr arg2, tcg_target_long offset) 4678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 4685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i32(INDEX_op_st_i32, arg1, arg2, offset); 4698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 4708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 4715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_add_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 4728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 4735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_add_i32, ret, arg1, arg2); 4748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 4758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 4765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_addi_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2) 4778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 4788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project /* some cases can be optimized here */ 4798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (arg2 == 0) { 4808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_mov_i32(ret, arg1); 4818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } else { 4825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0 = tcg_const_i32(arg2); 4838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_add_i32(ret, arg1, t0); 4845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 4858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 4868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 4878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 4885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sub_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 4898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 4905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_sub_i32, ret, arg1, arg2); 4918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 4928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 4935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_subfi_i32(TCGv_i32 ret, int32_t arg1, TCGv_i32 arg2) 4945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 4955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0 = tcg_const_i32(arg1); 4965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_sub_i32(ret, t0, arg2); 4975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 4985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 4995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 5005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_subi_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2) 5018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 5028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project /* some cases can be optimized here */ 5038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (arg2 == 0) { 5048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_mov_i32(ret, arg1); 5058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } else { 5065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0 = tcg_const_i32(arg2); 5078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_sub_i32(ret, arg1, t0); 5085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 5098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 5108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 5118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 5125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_and_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 5138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 5145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner if (TCGV_EQUAL_I32(arg1, arg2)) { 5155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(ret, arg1); 5165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } else { 5175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_and_i32, ret, arg1, arg2); 5185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } 5198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 5208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 5215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_andi_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2) 5228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 5238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project /* some cases can be optimized here */ 5248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (arg2 == 0) { 5258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i32(ret, 0); 5268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } else if (arg2 == 0xffffffff) { 5278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_mov_i32(ret, arg1); 5288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } else { 5295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0 = tcg_const_i32(arg2); 5308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_and_i32(ret, arg1, t0); 5315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 5328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 5338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 5348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 5355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_or_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 5368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 5375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner if (TCGV_EQUAL_I32(arg1, arg2)) { 5385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(ret, arg1); 5395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } else { 5405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_or_i32, ret, arg1, arg2); 5415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } 5428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 5438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 5445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ori_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2) 5458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 5468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project /* some cases can be optimized here */ 5478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (arg2 == 0xffffffff) { 5488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i32(ret, 0xffffffff); 5498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } else if (arg2 == 0) { 5508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_mov_i32(ret, arg1); 5518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } else { 5525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0 = tcg_const_i32(arg2); 5538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_or_i32(ret, arg1, t0); 5545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 5558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 5568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 5578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 5585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_xor_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 5598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 5605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner if (TCGV_EQUAL_I32(arg1, arg2)) { 5615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_movi_i32(ret, 0); 5625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } else { 5635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_xor_i32, ret, arg1, arg2); 5645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } 5658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 5668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 5675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_xori_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2) 5688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 5698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project /* some cases can be optimized here */ 5708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (arg2 == 0) { 5718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_mov_i32(ret, arg1); 5728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } else { 5735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0 = tcg_const_i32(arg2); 5748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_xor_i32(ret, arg1, t0); 5755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 5768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 5778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 5788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 5795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shl_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 5808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 5815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_shl_i32, ret, arg1, arg2); 5828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 5838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 5845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shli_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2) 5858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 5868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (arg2 == 0) { 5878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_mov_i32(ret, arg1); 5888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } else { 5895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0 = tcg_const_i32(arg2); 5908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shl_i32(ret, arg1, t0); 5915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 5928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 5938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 5948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 5955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shr_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 5968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 5975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_shr_i32, ret, arg1, arg2); 5988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 5998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 6005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shri_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2) 6018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 6028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (arg2 == 0) { 6038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_mov_i32(ret, arg1); 6048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } else { 6055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0 = tcg_const_i32(arg2); 6068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shr_i32(ret, arg1, t0); 6075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 6088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 6098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 6108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 6115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sar_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 6128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 6135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_sar_i32, ret, arg1, arg2); 6148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 6158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 6165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sari_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2) 6178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 6188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (arg2 == 0) { 6198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_mov_i32(ret, arg1); 6208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } else { 6215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0 = tcg_const_i32(arg2); 6228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_sar_i32(ret, arg1, t0); 6235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 6248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 6258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 6268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 627f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_brcond_i32(TCGCond cond, TCGv_i32 arg1, 628f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner TCGv_i32 arg2, int label_index) 6298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 6305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op4ii_i32(INDEX_op_brcond_i32, arg1, arg2, cond, label_index); 6318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 6328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 633f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_brcondi_i32(TCGCond cond, TCGv_i32 arg1, 634f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner int32_t arg2, int label_index) 6358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 6365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0 = tcg_const_i32(arg2); 6378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_brcond_i32(cond, arg1, t0, label_index); 6385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 6398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 6408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 641f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_setcond_i32(TCGCond cond, TCGv_i32 ret, 642b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner TCGv_i32 arg1, TCGv_i32 arg2) 643b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner{ 644b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_op4i_i32(INDEX_op_setcond_i32, ret, arg1, arg2, cond); 645b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner} 646b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner 647f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_setcondi_i32(TCGCond cond, TCGv_i32 ret, 648f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner TCGv_i32 arg1, int32_t arg2) 649b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner{ 650b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner TCGv_i32 t0 = tcg_const_i32(arg2); 651b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_setcond_i32(cond, ret, arg1, t0); 652b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_temp_free_i32(t0); 653b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner} 654b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner 6555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_mul_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 6568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 6575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_mul_i32, ret, arg1, arg2); 6588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 6598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 6605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_muli_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2) 6618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 6625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0 = tcg_const_i32(arg2); 6638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_mul_i32(ret, arg1, t0); 6645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 6658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 6668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 6678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_div_i32 6685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_div_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 6698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 6705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_div_i32, ret, arg1, arg2); 6718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 6728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 6735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rem_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 6748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 6755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_rem_i32, ret, arg1, arg2); 6768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 6778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 6785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_divu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 6798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 6805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_divu_i32, ret, arg1, arg2); 6818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 6828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 6835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_remu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 6848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 6855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_remu_i32, ret, arg1, arg2); 6868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 687f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#elif defined(TCG_TARGET_HAS_div2_i32) 6885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_div_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 6898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 6905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0; 6915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i32(); 6928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_sari_i32(t0, arg1, 31); 6935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op5_i32(INDEX_op_div2_i32, ret, t0, arg1, t0, arg2); 6945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 6958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 6968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 6975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rem_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 6988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 6995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0; 7005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i32(); 7018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_sari_i32(t0, arg1, 31); 7025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op5_i32(INDEX_op_div2_i32, t0, ret, arg1, t0, arg2); 7035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 7048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 7058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 7065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_divu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 7078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 7085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0; 7095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i32(); 7108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i32(t0, 0); 7115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op5_i32(INDEX_op_divu2_i32, ret, t0, arg1, t0, arg2); 7125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 7138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 7148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 7155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_remu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 7168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 7175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0; 7185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i32(); 7198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i32(t0, 0); 7205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op5_i32(INDEX_op_divu2_i32, t0, ret, arg1, t0, arg2); 7215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 7228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 723f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#else 724f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_div_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 725f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner{ 726f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner int sizemask = 0; 727f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner /* Return value and both arguments are 32-bit and signed. */ 728f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(0, 0, 1); 729f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(1, 0, 1); 730f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(2, 0, 1); 731f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 732f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_helper32(tcg_helper_div_i32, sizemask, ret, arg1, arg2); 733f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner} 734f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 735f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_rem_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 736f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner{ 737f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner int sizemask = 0; 738f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner /* Return value and both arguments are 32-bit and signed. */ 739f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(0, 0, 1); 740f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(1, 0, 1); 741f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(2, 0, 1); 742f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 743f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_helper32(tcg_helper_rem_i32, sizemask, ret, arg1, arg2); 744f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner} 745f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 746f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_divu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 747f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner{ 748f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner int sizemask = 0; 749f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner /* Return value and both arguments are 32-bit and unsigned. */ 750f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(0, 0, 0); 751f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(1, 0, 0); 752f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(2, 0, 0); 753f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 754f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_helper32(tcg_helper_divu_i32, sizemask, ret, arg1, arg2); 755f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner} 756f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 757f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_remu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 758f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner{ 759f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner int sizemask = 0; 760f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner /* Return value and both arguments are 32-bit and unsigned. */ 761f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(0, 0, 0); 762f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(1, 0, 0); 763f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(2, 0, 0); 764f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 765f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_helper32(tcg_helper_remu_i32, sizemask, ret, arg1, arg2); 766f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner} 7678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 7688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 7698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TCG_TARGET_REG_BITS == 32 7708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 7715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_mov_i64(TCGv_i64 ret, TCGv_i64 arg) 7728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 7735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner if (!TCGV_EQUAL_I64(ret, arg)) { 7745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(TCGV_LOW(ret), TCGV_LOW(arg)); 7758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_mov_i32(TCGV_HIGH(ret), TCGV_HIGH(arg)); 7768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 7778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 7788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 7795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_movi_i64(TCGv_i64 ret, int64_t arg) 7808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 7815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_movi_i32(TCGV_LOW(ret), arg); 7828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i32(TCGV_HIGH(ret), arg >> 32); 7838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 7848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 7855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld8u_i64(TCGv_i64 ret, TCGv_ptr arg2, 7865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_target_long offset) 7878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 7885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ld8u_i32(TCGV_LOW(ret), arg2, offset); 7898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i32(TCGV_HIGH(ret), 0); 7908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 7918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 7925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld8s_i64(TCGv_i64 ret, TCGv_ptr arg2, 7935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_target_long offset) 7948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 7955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ld8s_i32(TCGV_LOW(ret), arg2, offset); 7965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_HIGH(ret), 31); 7978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 7988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 7995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld16u_i64(TCGv_i64 ret, TCGv_ptr arg2, 8005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_target_long offset) 8018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 8025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ld16u_i32(TCGV_LOW(ret), arg2, offset); 8038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i32(TCGV_HIGH(ret), 0); 8048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 8058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 8065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld16s_i64(TCGv_i64 ret, TCGv_ptr arg2, 8075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_target_long offset) 8088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 8095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ld16s_i32(TCGV_LOW(ret), arg2, offset); 8105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31); 8118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 8128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 8135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld32u_i64(TCGv_i64 ret, TCGv_ptr arg2, 8145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_target_long offset) 8158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 8165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ld_i32(TCGV_LOW(ret), arg2, offset); 8178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i32(TCGV_HIGH(ret), 0); 8188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 8198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 8205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld32s_i64(TCGv_i64 ret, TCGv_ptr arg2, 8215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_target_long offset) 8228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 8235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ld_i32(TCGV_LOW(ret), arg2, offset); 8245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31); 8258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 8268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 8275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld_i64(TCGv_i64 ret, TCGv_ptr arg2, 8285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_target_long offset) 8298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 8308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project /* since arg2 and ret have different types, they cannot be the 8318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project same temporary */ 8328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_WORDS_BIGENDIAN 8338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_ld_i32(TCGV_HIGH(ret), arg2, offset); 8345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ld_i32(TCGV_LOW(ret), arg2, offset + 4); 8358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 8365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ld_i32(TCGV_LOW(ret), arg2, offset); 8378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_ld_i32(TCGV_HIGH(ret), arg2, offset + 4); 8388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 8398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 8408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 8415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st8_i64(TCGv_i64 arg1, TCGv_ptr arg2, 8425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_target_long offset) 8438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 8445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_st8_i32(TCGV_LOW(arg1), arg2, offset); 8458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 8468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 8475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st16_i64(TCGv_i64 arg1, TCGv_ptr arg2, 8485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_target_long offset) 8498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 8505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_st16_i32(TCGV_LOW(arg1), arg2, offset); 8518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 8528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 8535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st32_i64(TCGv_i64 arg1, TCGv_ptr arg2, 8545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_target_long offset) 8558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 8565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_st_i32(TCGV_LOW(arg1), arg2, offset); 8578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 8588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 8595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st_i64(TCGv_i64 arg1, TCGv_ptr arg2, 8605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_target_long offset) 8618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 8628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_WORDS_BIGENDIAN 8638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_st_i32(TCGV_HIGH(arg1), arg2, offset); 8645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_st_i32(TCGV_LOW(arg1), arg2, offset + 4); 8658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 8665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_st_i32(TCGV_LOW(arg1), arg2, offset); 8678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_st_i32(TCGV_HIGH(arg1), arg2, offset + 4); 8688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 8698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 8708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 8715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_add_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 8728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 8735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op6_i32(INDEX_op_add2_i32, TCGV_LOW(ret), TCGV_HIGH(ret), 8745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_LOW(arg1), TCGV_HIGH(arg1), TCGV_LOW(arg2), 8755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_HIGH(arg2)); 8768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 8778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 8785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sub_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 8798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 8805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op6_i32(INDEX_op_sub2_i32, TCGV_LOW(ret), TCGV_HIGH(ret), 8815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_LOW(arg1), TCGV_HIGH(arg1), TCGV_LOW(arg2), 8825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_HIGH(arg2)); 8838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 8848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 8855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_and_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 8868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 8875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_and_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2)); 8888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_and_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2)); 8898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 8908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 8915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_andi_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 8928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 8935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_andi_i32(TCGV_LOW(ret), TCGV_LOW(arg1), arg2); 8948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_andi_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), arg2 >> 32); 8958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 8968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 8975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_or_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 8988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 8995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2)); 9008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_or_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2)); 9018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 9028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 9035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ori_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 9048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 9055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ori_i32(TCGV_LOW(ret), TCGV_LOW(arg1), arg2); 9068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_ori_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), arg2 >> 32); 9078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 9088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 9095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_xor_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 9108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 9115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_xor_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2)); 9128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_xor_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2)); 9138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 9148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 9155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_xori_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 9168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 9175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_xori_i32(TCGV_LOW(ret), TCGV_LOW(arg1), arg2); 9188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_xori_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), arg2 >> 32); 9198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 9208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 9218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* XXX: use generic code when basic block handling is OK or CPU 9228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project specific code (x86) */ 9235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shl_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 9248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 925f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner int sizemask = 0; 926f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner /* Return value and both arguments are 64-bit and signed. */ 927f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(0, 1, 1); 928f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(1, 1, 1); 929f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(2, 1, 1); 930f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 931f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_helper64(tcg_helper_shl_i64, sizemask, ret, arg1, arg2); 9328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 9338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 9345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shli_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 9358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 9368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shifti_i64(ret, arg1, arg2, 0, 0); 9378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 9388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 9395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shr_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 9408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 941f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner int sizemask = 0; 942f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner /* Return value and both arguments are 64-bit and signed. */ 943f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(0, 1, 1); 944f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(1, 1, 1); 945f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(2, 1, 1); 946f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 947f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_helper64(tcg_helper_shr_i64, sizemask, ret, arg1, arg2); 9488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 9498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 9505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shri_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 9518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 9528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shifti_i64(ret, arg1, arg2, 1, 0); 9538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 9548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 9555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sar_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 9568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 957f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner int sizemask = 0; 958f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner /* Return value and both arguments are 64-bit and signed. */ 959f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(0, 1, 1); 960f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(1, 1, 1); 961f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(2, 1, 1); 962f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 963f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_helper64(tcg_helper_sar_i64, sizemask, ret, arg1, arg2); 9648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 9658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 9665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sari_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 9678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 9688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shifti_i64(ret, arg1, arg2, 1, 1); 9698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 9708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 971f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_brcond_i64(TCGCond cond, TCGv_i64 arg1, 972f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner TCGv_i64 arg2, int label_index) 9738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 9745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op6ii_i32(INDEX_op_brcond2_i32, 9755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_LOW(arg1), TCGV_HIGH(arg1), TCGV_LOW(arg2), 9765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_HIGH(arg2), cond, label_index); 9778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 9788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 979f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_setcond_i64(TCGCond cond, TCGv_i64 ret, 980b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner TCGv_i64 arg1, TCGv_i64 arg2) 981b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner{ 982b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_op6i_i32(INDEX_op_setcond2_i32, TCGV_LOW(ret), 983b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner TCGV_LOW(arg1), TCGV_HIGH(arg1), 984b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner TCGV_LOW(arg2), TCGV_HIGH(arg2), cond); 985b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_movi_i32(TCGV_HIGH(ret), 0); 986b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner} 987b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner 9885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_mul_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 9898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 9905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0; 9915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t1; 9928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 9935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i64(); 9945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t1 = tcg_temp_new_i32(); 9955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 9965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op4_i32(INDEX_op_mulu2_i32, TCGV_LOW(t0), TCGV_HIGH(t0), 9975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_LOW(arg1), TCGV_LOW(arg2)); 9985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 9995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mul_i32(t1, TCGV_LOW(arg1), TCGV_HIGH(arg2)); 10008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_add_i32(TCGV_HIGH(t0), TCGV_HIGH(t0), t1); 10015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mul_i32(t1, TCGV_HIGH(arg1), TCGV_LOW(arg2)); 10028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_add_i32(TCGV_HIGH(t0), TCGV_HIGH(t0), t1); 10038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 10045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i64(ret, t0); 10055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 10065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t1); 10078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 10088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 10095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_div_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 10108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1011f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner int sizemask = 0; 1012f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner /* Return value and both arguments are 64-bit and signed. */ 1013f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(0, 1, 1); 1014f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(1, 1, 1); 1015f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(2, 1, 1); 1016f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 1017f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_helper64(tcg_helper_div_i64, sizemask, ret, arg1, arg2); 10188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 10198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 10205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rem_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 10218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1022f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner int sizemask = 0; 1023f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner /* Return value and both arguments are 64-bit and signed. */ 1024f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(0, 1, 1); 1025f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(1, 1, 1); 1026f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(2, 1, 1); 1027f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 1028f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_helper64(tcg_helper_rem_i64, sizemask, ret, arg1, arg2); 10298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 10308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 10315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_divu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 10328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1033f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner int sizemask = 0; 1034f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner /* Return value and both arguments are 64-bit and unsigned. */ 1035f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(0, 1, 0); 1036f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(1, 1, 0); 1037f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(2, 1, 0); 1038f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 1039f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_helper64(tcg_helper_divu_i64, sizemask, ret, arg1, arg2); 10408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 10418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 10425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_remu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 10438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1044f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner int sizemask = 0; 1045f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner /* Return value and both arguments are 64-bit and unsigned. */ 1046f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(0, 1, 0); 1047f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(1, 1, 0); 1048f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(2, 1, 0); 1049f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 1050f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_helper64(tcg_helper_remu_i64, sizemask, ret, arg1, arg2); 10518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 10528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 10538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 10548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 10555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_mov_i64(TCGv_i64 ret, TCGv_i64 arg) 10568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 10575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner if (!TCGV_EQUAL_I64(ret, arg)) 10585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i64(INDEX_op_mov_i64, ret, arg); 10598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 10608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 10615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_movi_i64(TCGv_i64 ret, int64_t arg) 10628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 10635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2i_i64(INDEX_op_movi_i64, ret, arg); 10648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 10658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 10665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld8u_i64(TCGv_i64 ret, TCGv_i64 arg2, 10678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_target_long offset) 10688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 10695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i64(INDEX_op_ld8u_i64, ret, arg2, offset); 10708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 10718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 10725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld8s_i64(TCGv_i64 ret, TCGv_i64 arg2, 10738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_target_long offset) 10748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 10755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i64(INDEX_op_ld8s_i64, ret, arg2, offset); 10768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 10778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 10785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld16u_i64(TCGv_i64 ret, TCGv_i64 arg2, 10798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_target_long offset) 10808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 10815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i64(INDEX_op_ld16u_i64, ret, arg2, offset); 10828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 10838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 10845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld16s_i64(TCGv_i64 ret, TCGv_i64 arg2, 10858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_target_long offset) 10868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 10875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i64(INDEX_op_ld16s_i64, ret, arg2, offset); 10888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 10898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 10905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld32u_i64(TCGv_i64 ret, TCGv_i64 arg2, 10918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_target_long offset) 10928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 10935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i64(INDEX_op_ld32u_i64, ret, arg2, offset); 10948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 10958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 10965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld32s_i64(TCGv_i64 ret, TCGv_i64 arg2, 10978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_target_long offset) 10988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 10995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i64(INDEX_op_ld32s_i64, ret, arg2, offset); 11008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 11018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 11025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld_i64(TCGv_i64 ret, TCGv_i64 arg2, tcg_target_long offset) 11038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 11045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i64(INDEX_op_ld_i64, ret, arg2, offset); 11058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 11068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 11075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st8_i64(TCGv_i64 arg1, TCGv_i64 arg2, 11088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_target_long offset) 11098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 11105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i64(INDEX_op_st8_i64, arg1, arg2, offset); 11118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 11128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 11135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st16_i64(TCGv_i64 arg1, TCGv_i64 arg2, 11148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_target_long offset) 11158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 11165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i64(INDEX_op_st16_i64, arg1, arg2, offset); 11178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 11188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 11195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st32_i64(TCGv_i64 arg1, TCGv_i64 arg2, 11208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_target_long offset) 11218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 11225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i64(INDEX_op_st32_i64, arg1, arg2, offset); 11238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 11248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 11255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st_i64(TCGv_i64 arg1, TCGv_i64 arg2, tcg_target_long offset) 11268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 11275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i64(INDEX_op_st_i64, arg1, arg2, offset); 11288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 11298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 11305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_add_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 11318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 11325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_add_i64, ret, arg1, arg2); 11338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 11348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 11355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sub_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 11368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 11375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_sub_i64, ret, arg1, arg2); 11388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 11398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 11405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_and_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 11418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 11425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner if (TCGV_EQUAL_I64(arg1, arg2)) { 11435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i64(ret, arg1); 11445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } else { 11455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_and_i64, ret, arg1, arg2); 11465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } 11478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 11488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 11495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_andi_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 11508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 11515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0 = tcg_const_i64(arg2); 11528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_and_i64(ret, arg1, t0); 11535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 11548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 11558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 11565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_or_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 11578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 11585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner if (TCGV_EQUAL_I64(arg1, arg2)) { 11595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i64(ret, arg1); 11605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } else { 11615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_or_i64, ret, arg1, arg2); 11625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } 11638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 11648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 11655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ori_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 11668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 11675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0 = tcg_const_i64(arg2); 11688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_or_i64(ret, arg1, t0); 11695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 11708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 11718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 11725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_xor_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 11738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 11745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner if (TCGV_EQUAL_I64(arg1, arg2)) { 11755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_movi_i64(ret, 0); 11765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } else { 11775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_xor_i64, ret, arg1, arg2); 11785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } 11798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 11808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 11815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_xori_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 11828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 11835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0 = tcg_const_i64(arg2); 11848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_xor_i64(ret, arg1, t0); 11855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 11868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 11878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 11885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shl_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 11898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 11905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_shl_i64, ret, arg1, arg2); 11918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 11928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 11935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shli_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 11948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 11958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (arg2 == 0) { 11968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_mov_i64(ret, arg1); 11978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } else { 11985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0 = tcg_const_i64(arg2); 11998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shl_i64(ret, arg1, t0); 12005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 12018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 12028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 12038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 12045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shr_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 12058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 12065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_shr_i64, ret, arg1, arg2); 12078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 12088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 12095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shri_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 12108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 12118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (arg2 == 0) { 12128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_mov_i64(ret, arg1); 12138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } else { 12145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0 = tcg_const_i64(arg2); 12158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shr_i64(ret, arg1, t0); 12165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 12178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 12188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 12198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 12205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sar_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 12218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 12225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_sar_i64, ret, arg1, arg2); 12238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 12248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 12255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sari_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 12268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 12278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (arg2 == 0) { 12288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_mov_i64(ret, arg1); 12298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } else { 12305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0 = tcg_const_i64(arg2); 12318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_sar_i64(ret, arg1, t0); 12325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 12338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 12348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 12358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1236f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_brcond_i64(TCGCond cond, TCGv_i64 arg1, 1237f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner TCGv_i64 arg2, int label_index) 12388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 12395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op4ii_i64(INDEX_op_brcond_i64, arg1, arg2, cond, label_index); 12408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 12418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1242f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_setcond_i64(TCGCond cond, TCGv_i64 ret, 1243b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner TCGv_i64 arg1, TCGv_i64 arg2) 1244b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner{ 1245b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_op4i_i64(INDEX_op_setcond_i64, ret, arg1, arg2, cond); 1246b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner} 1247b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner 12485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_mul_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 12498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 12505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_mul_i64, ret, arg1, arg2); 12518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 12528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 12538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_div_i64 12545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_div_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 12558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 12565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_div_i64, ret, arg1, arg2); 12578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 12588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 12595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rem_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 12608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 12615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_rem_i64, ret, arg1, arg2); 12628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 12638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 12645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_divu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 12658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 12665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_divu_i64, ret, arg1, arg2); 12678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 12688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 12695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_remu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 12708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 12715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_remu_i64, ret, arg1, arg2); 12728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 1273f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#elif defined(TCG_TARGET_HAS_div2_i64) 12745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_div_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 12758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 12765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0; 12775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i64(); 12788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_sari_i64(t0, arg1, 63); 12795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op5_i64(INDEX_op_div2_i64, ret, t0, arg1, t0, arg2); 12805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 12818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 12828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 12835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rem_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 12848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 12855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0; 12865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i64(); 12878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_sari_i64(t0, arg1, 63); 12885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op5_i64(INDEX_op_div2_i64, t0, ret, arg1, t0, arg2); 12895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 12908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 12918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 12925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_divu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 12938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 12945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0; 12955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i64(); 12968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i64(t0, 0); 12975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op5_i64(INDEX_op_divu2_i64, ret, t0, arg1, t0, arg2); 12985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 12998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 13008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 13015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_remu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 13028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 13035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0; 13045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i64(); 13058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i64(t0, 0); 13065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op5_i64(INDEX_op_divu2_i64, t0, ret, arg1, t0, arg2); 13075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 13088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 1309f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#else 1310f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_div_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 1311f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner{ 1312f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner int sizemask = 0; 1313f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner /* Return value and both arguments are 64-bit and signed. */ 1314f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(0, 1, 1); 1315f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(1, 1, 1); 1316f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(2, 1, 1); 1317f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 1318f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_helper64(tcg_helper_div_i64, sizemask, ret, arg1, arg2); 1319f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner} 1320f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 1321f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_rem_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 1322f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner{ 1323f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner int sizemask = 0; 1324f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner /* Return value and both arguments are 64-bit and signed. */ 1325f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(0, 1, 1); 1326f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(1, 1, 1); 1327f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(2, 1, 1); 1328f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 1329f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_helper64(tcg_helper_rem_i64, sizemask, ret, arg1, arg2); 1330f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner} 1331f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 1332f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_divu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 1333f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner{ 1334f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner int sizemask = 0; 1335f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner /* Return value and both arguments are 64-bit and unsigned. */ 1336f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(0, 1, 0); 1337f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(1, 1, 0); 1338f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(2, 1, 0); 1339f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 1340f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_helper64(tcg_helper_divu_i64, sizemask, ret, arg1, arg2); 1341f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner} 1342f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 1343f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_remu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 1344f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner{ 1345f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner int sizemask = 0; 1346f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner /* Return value and both arguments are 64-bit and unsigned. */ 1347f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(0, 1, 0); 1348f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(1, 1, 0); 1349f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner sizemask |= tcg_gen_sizemask(2, 1, 0); 1350f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 1351f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_helper64(tcg_helper_remu_i64, sizemask, ret, arg1, arg2); 1352f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner} 13538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 13548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 13558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 13568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 13575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_addi_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 13585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 13595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner /* some cases can be optimized here */ 13605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner if (arg2 == 0) { 13615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i64(ret, arg1); 13625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } else { 13635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0 = tcg_const_i64(arg2); 13645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_add_i64(ret, arg1, t0); 13655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 13665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } 13675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 13685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 13695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_subfi_i64(TCGv_i64 ret, int64_t arg1, TCGv_i64 arg2) 13705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 13715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0 = tcg_const_i64(arg1); 13725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_sub_i64(ret, t0, arg2); 13735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 13745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 13755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 13765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_subi_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 13775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 13785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner /* some cases can be optimized here */ 13795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner if (arg2 == 0) { 13805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i64(ret, arg1); 13815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } else { 13825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0 = tcg_const_i64(arg2); 13835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_sub_i64(ret, arg1, t0); 13845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 13855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } 13865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 1387f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_brcondi_i64(TCGCond cond, TCGv_i64 arg1, 1388f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner int64_t arg2, int label_index) 13898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 13905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0 = tcg_const_i64(arg2); 13918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_brcond_i64(cond, arg1, t0, label_index); 13925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 13938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 13948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1395f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_setcondi_i64(TCGCond cond, TCGv_i64 ret, 1396f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner TCGv_i64 arg1, int64_t arg2) 1397b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner{ 1398b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner TCGv_i64 t0 = tcg_const_i64(arg2); 1399b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_setcond_i64(cond, ret, arg1, t0); 1400b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_temp_free_i64(t0); 1401b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner} 1402b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner 14035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_muli_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 14045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 14055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0 = tcg_const_i64(arg2); 14065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mul_i64(ret, arg1, t0); 14075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 14085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 14095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 14105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 14118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/***************************************/ 14128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* optional operations */ 14138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 14145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext8s_i32(TCGv_i32 ret, TCGv_i32 arg) 14158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 14168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_ext8s_i32 14175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i32(INDEX_op_ext8s_i32, ret, arg); 14188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 14198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shli_i32(ret, arg, 24); 14208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_sari_i32(ret, ret, 24); 14218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 14228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 14238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 14245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext16s_i32(TCGv_i32 ret, TCGv_i32 arg) 14258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 14268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_ext16s_i32 14275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i32(INDEX_op_ext16s_i32, ret, arg); 14288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 14298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shli_i32(ret, arg, 16); 14308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_sari_i32(ret, ret, 16); 14318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 14328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 14338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 14345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext8u_i32(TCGv_i32 ret, TCGv_i32 arg) 14358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1436b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_ext8u_i32 1437b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_op2_i32(INDEX_op_ext8u_i32, ret, arg); 1438b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else 14398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_andi_i32(ret, arg, 0xffu); 1440b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif 14418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 14428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 14435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext16u_i32(TCGv_i32 ret, TCGv_i32 arg) 14448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1445b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_ext16u_i32 1446b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_op2_i32(INDEX_op_ext16u_i32, ret, arg); 1447b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else 14488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_andi_i32(ret, arg, 0xffffu); 1449b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif 14508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 14518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 14528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Note: we assume the two high bytes are set to zero */ 14535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap16_i32(TCGv_i32 ret, TCGv_i32 arg) 14548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 14558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_bswap16_i32 14565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i32(INDEX_op_bswap16_i32, ret, arg); 14578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 14585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0 = tcg_temp_new_i32(); 14598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 14605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ext8u_i32(t0, arg); 14615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shli_i32(t0, t0, 8); 14625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shri_i32(ret, arg, 8); 14635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i32(ret, ret, t0); 14645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 14658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 14668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 14678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 14685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap32_i32(TCGv_i32 ret, TCGv_i32 arg) 14698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 14705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_bswap32_i32 14715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i32(INDEX_op_bswap32_i32, ret, arg); 14728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 14735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0, t1; 14745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i32(); 14755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t1 = tcg_temp_new_i32(); 14768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 14778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shli_i32(t0, arg, 24); 14788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 14798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_andi_i32(t1, arg, 0x0000ff00); 14808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shli_i32(t1, t1, 8); 14818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_or_i32(t0, t0, t1); 14828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 14838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shri_i32(t1, arg, 8); 14848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_andi_i32(t1, t1, 0x0000ff00); 14858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_or_i32(t0, t0, t1); 14868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 14878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shri_i32(t1, arg, 24); 14888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_or_i32(ret, t0, t1); 14895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 14905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t1); 14918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 14928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 14938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 14948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TCG_TARGET_REG_BITS == 32 14955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext8s_i64(TCGv_i64 ret, TCGv_i64 arg) 14968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 14975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ext8s_i32(TCGV_LOW(ret), TCGV_LOW(arg)); 14985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31); 14998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 15008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 15015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext16s_i64(TCGv_i64 ret, TCGv_i64 arg) 15028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 15035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ext16s_i32(TCGV_LOW(ret), TCGV_LOW(arg)); 15045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31); 15058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 15068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 15075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext32s_i64(TCGv_i64 ret, TCGv_i64 arg) 15088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 15095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(TCGV_LOW(ret), TCGV_LOW(arg)); 15105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31); 15118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 15128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 15135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext8u_i64(TCGv_i64 ret, TCGv_i64 arg) 15148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 15155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ext8u_i32(TCGV_LOW(ret), TCGV_LOW(arg)); 15168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i32(TCGV_HIGH(ret), 0); 15178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 15188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 15195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext16u_i64(TCGv_i64 ret, TCGv_i64 arg) 15208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 15215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ext16u_i32(TCGV_LOW(ret), TCGV_LOW(arg)); 15228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i32(TCGV_HIGH(ret), 0); 15238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 15248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 15255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext32u_i64(TCGv_i64 ret, TCGv_i64 arg) 15268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 15275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(TCGV_LOW(ret), TCGV_LOW(arg)); 15288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i32(TCGV_HIGH(ret), 0); 15298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 15308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 15315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_trunc_i64_i32(TCGv_i32 ret, TCGv_i64 arg) 15328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 15335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(ret, TCGV_LOW(arg)); 15348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 15358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 15365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_extu_i32_i64(TCGv_i64 ret, TCGv_i32 arg) 15378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 15385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(TCGV_LOW(ret), arg); 15398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i32(TCGV_HIGH(ret), 0); 15408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 15418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 15425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext_i32_i64(TCGv_i64 ret, TCGv_i32 arg) 15435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 15445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(TCGV_LOW(ret), arg); 15455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31); 15465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 15475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 15485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Note: we assume the six high bytes are set to zero */ 15495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap16_i64(TCGv_i64 ret, TCGv_i64 arg) 15505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 15515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(TCGV_HIGH(ret), TCGV_HIGH(arg)); 15525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_bswap16_i32(TCGV_LOW(ret), TCGV_LOW(arg)); 15535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 15545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 15555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Note: we assume the four high bytes are set to zero */ 15565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap32_i64(TCGv_i64 ret, TCGv_i64 arg) 15578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 15585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(TCGV_HIGH(ret), TCGV_HIGH(arg)); 15595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_bswap32_i32(TCGV_LOW(ret), TCGV_LOW(arg)); 15608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 15618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 15625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap64_i64(TCGv_i64 ret, TCGv_i64 arg) 15638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 15645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0, t1; 15655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i32(); 15665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t1 = tcg_temp_new_i32(); 15678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 15685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_bswap32_i32(t0, TCGV_LOW(arg)); 15695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_bswap32_i32(t1, TCGV_HIGH(arg)); 15705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(TCGV_LOW(ret), t1); 15718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_mov_i32(TCGV_HIGH(ret), t0); 15725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 15735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t1); 15748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 15758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 15768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 15775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext8s_i64(TCGv_i64 ret, TCGv_i64 arg) 15788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 15798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_ext8s_i64 15805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i64(INDEX_op_ext8s_i64, ret, arg); 15818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 15828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shli_i64(ret, arg, 56); 15838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_sari_i64(ret, ret, 56); 15848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 15858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 15868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 15875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext16s_i64(TCGv_i64 ret, TCGv_i64 arg) 15888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 15898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_ext16s_i64 15905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i64(INDEX_op_ext16s_i64, ret, arg); 15918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 15928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shli_i64(ret, arg, 48); 15938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_sari_i64(ret, ret, 48); 15948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 15958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 15968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 15975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext32s_i64(TCGv_i64 ret, TCGv_i64 arg) 15988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 15998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_ext32s_i64 16005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i64(INDEX_op_ext32s_i64, ret, arg); 16018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 16028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shli_i64(ret, arg, 32); 16038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_sari_i64(ret, ret, 32); 16048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 16058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 16068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 16075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext8u_i64(TCGv_i64 ret, TCGv_i64 arg) 16088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1609b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_ext8u_i64 1610b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_op2_i64(INDEX_op_ext8u_i64, ret, arg); 1611b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else 16128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_andi_i64(ret, arg, 0xffu); 1613b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif 16148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 16158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 16165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext16u_i64(TCGv_i64 ret, TCGv_i64 arg) 16178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1618b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_ext16u_i64 1619b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_op2_i64(INDEX_op_ext16u_i64, ret, arg); 1620b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else 16218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_andi_i64(ret, arg, 0xffffu); 1622b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif 16238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 16248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 16255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext32u_i64(TCGv_i64 ret, TCGv_i64 arg) 16268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1627b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_ext32u_i64 1628b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_op2_i64(INDEX_op_ext32u_i64, ret, arg); 1629b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else 16308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_andi_i64(ret, arg, 0xffffffffu); 1631b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif 16328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 16338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 16348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Note: we assume the target supports move between 32 and 64 bit 16358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project registers. This will probably break MIPS64 targets. */ 16365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_trunc_i64_i32(TCGv_i32 ret, TCGv_i64 arg) 16378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 16385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(ret, MAKE_TCGV_I32(GET_TCGV_I64(arg))); 16398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 16408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 16418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Note: we assume the target supports move between 32 and 64 bit 16428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project registers */ 16435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_extu_i32_i64(TCGv_i64 ret, TCGv_i32 arg) 16448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1645b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_ext32u_i64(ret, MAKE_TCGV_I64(GET_TCGV_I32(arg))); 16468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 16478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 16488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Note: we assume the target supports move between 32 and 64 bit 16498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project registers */ 16505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext_i32_i64(TCGv_i64 ret, TCGv_i32 arg) 16518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 16525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ext32s_i64(ret, MAKE_TCGV_I64(GET_TCGV_I32(arg))); 16535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 16545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Note: we assume the six high bytes are set to zero */ 16565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap16_i64(TCGv_i64 ret, TCGv_i64 arg) 16575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 16585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_bswap16_i64 16595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i64(INDEX_op_bswap16_i64, ret, arg); 16605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else 16615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0 = tcg_temp_new_i64(); 16625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ext8u_i64(t0, arg); 16645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shli_i64(t0, t0, 8); 16655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shri_i64(ret, arg, 8); 16665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i64(ret, ret, t0); 16675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 16685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif 16698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 16708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 16715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Note: we assume the four high bytes are set to zero */ 16725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap32_i64(TCGv_i64 ret, TCGv_i64 arg) 16738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 16745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_bswap32_i64 16755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i64(INDEX_op_bswap32_i64, ret, arg); 16768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 16775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0, t1; 16785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i64(); 16795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t1 = tcg_temp_new_i64(); 16805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shli_i64(t0, arg, 24); 16825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ext32u_i64(t0, t0); 16835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_andi_i64(t1, arg, 0x0000ff00); 16855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shli_i64(t1, t1, 8); 16865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i64(t0, t0, t1); 16875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shri_i64(t1, arg, 8); 16895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_andi_i64(t1, t1, 0x0000ff00); 16905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i64(t0, t0, t1); 16915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shri_i64(t1, arg, 24); 16935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i64(ret, t0, t1); 16945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 16955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t1); 16965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif 16975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 16985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap64_i64(TCGv_i64 ret, TCGv_i64 arg) 17005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 17015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_bswap64_i64 17025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i64(INDEX_op_bswap64_i64, ret, arg); 17035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else 1704ddf49e53df97a349f42c733059165dc73c9907dcDavid 'Digit' Turner TCGv_i64 t0 = tcg_temp_new_i64(); 1705ddf49e53df97a349f42c733059165dc73c9907dcDavid 'Digit' Turner TCGv_i64 t1 = tcg_temp_new_i64(); 17068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 17078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shli_i64(t0, arg, 56); 17088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 17098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_andi_i64(t1, arg, 0x0000ff00); 17108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shli_i64(t1, t1, 40); 17118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_or_i64(t0, t0, t1); 17128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 17138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_andi_i64(t1, arg, 0x00ff0000); 17148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shli_i64(t1, t1, 24); 17158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_or_i64(t0, t0, t1); 17168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 17178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_andi_i64(t1, arg, 0xff000000); 17188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shli_i64(t1, t1, 8); 17198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_or_i64(t0, t0, t1); 17208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 17218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shri_i64(t1, arg, 8); 17228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_andi_i64(t1, t1, 0xff000000); 17238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_or_i64(t0, t0, t1); 17248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 17258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shri_i64(t1, arg, 24); 17268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_andi_i64(t1, t1, 0x00ff0000); 17278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_or_i64(t0, t0, t1); 17288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 17298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shri_i64(t1, arg, 40); 17308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_andi_i64(t1, t1, 0x0000ff00); 17318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_or_i64(t0, t0, t1); 17328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 17338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shri_i64(t1, arg, 56); 17348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_or_i64(ret, t0, t1); 1735ddf49e53df97a349f42c733059165dc73c9907dcDavid 'Digit' Turner tcg_temp_free_i64(t0); 1736ddf49e53df97a349f42c733059165dc73c9907dcDavid 'Digit' Turner tcg_temp_free_i64(t1); 17378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 17388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 17398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 17408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 17418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 17425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_neg_i32(TCGv_i32 ret, TCGv_i32 arg) 17438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 17448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_neg_i32 17455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i32(INDEX_op_neg_i32, ret, arg); 17468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 17475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0 = tcg_const_i32(0); 17488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_sub_i32(ret, t0, arg); 17495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 17508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 17518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 17528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 17535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_neg_i64(TCGv_i64 ret, TCGv_i64 arg) 17548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 17558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_neg_i64 17565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i64(INDEX_op_neg_i64, ret, arg); 17578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 17585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0 = tcg_const_i64(0); 17598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_sub_i64(ret, t0, arg); 17605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 17618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 17628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 17638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 17645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_not_i32(TCGv_i32 ret, TCGv_i32 arg) 17658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 17665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_not_i32 17675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i32(INDEX_op_not_i32, ret, arg); 17685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else 17698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_xori_i32(ret, arg, -1); 17705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif 17718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 17728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 17735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_not_i64(TCGv_i64 ret, TCGv_i64 arg) 17748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 17755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_not_i64 17765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i64(INDEX_op_not_i64, ret, arg); 1777f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#elif defined(TCG_TARGET_HAS_not_i32) && TCG_TARGET_REG_BITS == 32 1778f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_not_i32(TCGV_LOW(ret), TCGV_LOW(arg)); 1779f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_not_i32(TCGV_HIGH(ret), TCGV_HIGH(arg)); 17805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else 17818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_xori_i64(ret, arg, -1); 17825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif 17838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 17848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 17855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_discard_i32(TCGv_i32 arg) 17868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 17875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op1_i32(INDEX_op_discard, arg); 17888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 17898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 17908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TCG_TARGET_REG_BITS == 32 17915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_discard_i64(TCGv_i64 arg) 17928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 17935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_discard_i32(TCGV_LOW(arg)); 17948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_discard_i32(TCGV_HIGH(arg)); 17958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 17968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 17975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_discard_i64(TCGv_i64 arg) 17985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 17995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op1_i64(INDEX_op_discard, arg); 18005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 18015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif 18025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 18035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_concat_i32_i64(TCGv_i64 dest, TCGv_i32 low, TCGv_i32 high) 18045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 18055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#if TCG_TARGET_REG_BITS == 32 18065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(TCGV_LOW(dest), low); 18075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(TCGV_HIGH(dest), high); 18085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else 18095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 tmp = tcg_temp_new_i64(); 18105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner /* This extension is only needed for type correctness. 18115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner We may be able to do better given target specific information. */ 18125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_extu_i32_i64(tmp, high); 18135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shli_i64(tmp, tmp, 32); 18145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_extu_i32_i64(dest, low); 18155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i64(dest, dest, tmp); 18165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(tmp); 18175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif 18185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 18195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 18205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_concat32_i64(TCGv_i64 dest, TCGv_i64 low, TCGv_i64 high) 18215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 18225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#if TCG_TARGET_REG_BITS == 32 18235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_concat_i32_i64(dest, TCGV_LOW(low), TCGV_LOW(high)); 18245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else 18255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 tmp = tcg_temp_new_i64(); 18265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ext32u_i64(dest, low); 18275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shli_i64(tmp, high, 32); 18285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i64(dest, dest, tmp); 18295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(tmp); 18305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif 18315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 18325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 18335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_andc_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 18345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1835b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_andc_i32 1836b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_andc_i32, ret, arg1, arg2); 1837b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else 18385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0; 18395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i32(); 18405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_not_i32(t0, arg2); 18415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_and_i32(ret, arg1, t0); 18425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 1843b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif 18445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 18455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 18465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_andc_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 18475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1848b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_andc_i64 1849b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_andc_i64, ret, arg1, arg2); 1850b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#elif defined(TCG_TARGET_HAS_andc_i32) && TCG_TARGET_REG_BITS == 32 1851b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_andc_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2)); 1852b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_andc_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2)); 1853b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else 18545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0; 18555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i64(); 18565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_not_i64(t0, arg2); 18575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_and_i64(ret, arg1, t0); 18585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 1859b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif 18605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 18615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 18625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_eqv_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 18635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1864f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#ifdef TCG_TARGET_HAS_eqv_i32 1865f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_eqv_i32, ret, arg1, arg2); 1866f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#else 18675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_xor_i32(ret, arg1, arg2); 18685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_not_i32(ret, ret); 1869f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#endif 18705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 18715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 18725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_eqv_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 18735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1874f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#ifdef TCG_TARGET_HAS_eqv_i64 1875f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_eqv_i64, ret, arg1, arg2); 1876f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#elif defined(TCG_TARGET_HAS_eqv_i32) && TCG_TARGET_REG_BITS == 32 1877f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_eqv_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2)); 1878f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_eqv_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2)); 1879f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#else 18805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_xor_i64(ret, arg1, arg2); 18815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_not_i64(ret, ret); 1882f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#endif 18835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 18845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 18855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_nand_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 18865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1887f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#ifdef TCG_TARGET_HAS_nand_i32 1888f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_nand_i32, ret, arg1, arg2); 1889f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#else 18905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_and_i32(ret, arg1, arg2); 18915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_not_i32(ret, ret); 1892f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#endif 18935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 18945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 18955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_nand_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 18965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1897f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#ifdef TCG_TARGET_HAS_nand_i64 1898f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_nand_i64, ret, arg1, arg2); 1899f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#elif defined(TCG_TARGET_HAS_nand_i32) && TCG_TARGET_REG_BITS == 32 1900f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_nand_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2)); 1901f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_nand_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2)); 1902f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#else 19035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_and_i64(ret, arg1, arg2); 19045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_not_i64(ret, ret); 1905f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#endif 19065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 19075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 19085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_nor_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 19095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1910f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#ifdef TCG_TARGET_HAS_nor_i32 1911f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_nor_i32, ret, arg1, arg2); 1912f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#else 19135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i32(ret, arg1, arg2); 19145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_not_i32(ret, ret); 1915f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#endif 19165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 19175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 19185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_nor_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 19195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1920f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#ifdef TCG_TARGET_HAS_nor_i64 1921f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_nor_i64, ret, arg1, arg2); 1922f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#elif defined(TCG_TARGET_HAS_nor_i32) && TCG_TARGET_REG_BITS == 32 1923f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_nor_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2)); 1924f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_nor_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2)); 1925f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#else 19265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i64(ret, arg1, arg2); 19275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_not_i64(ret, ret); 1928f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#endif 19295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 19305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 19315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_orc_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 19325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1933b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_orc_i32 1934b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_orc_i32, ret, arg1, arg2); 1935b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else 19365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0; 19375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i32(); 19385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_not_i32(t0, arg2); 19395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i32(ret, arg1, t0); 19405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 1941b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif 19425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 19435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 19445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_orc_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 19455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1946b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_orc_i64 1947b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_orc_i64, ret, arg1, arg2); 1948b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#elif defined(TCG_TARGET_HAS_orc_i32) && TCG_TARGET_REG_BITS == 32 1949b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_orc_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2)); 1950b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_orc_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2)); 1951b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else 19525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0; 19535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i64(); 19545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_not_i64(t0, arg2); 19555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i64(ret, arg1, t0); 19565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 1957b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif 19585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 19595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 19605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotl_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 19615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 19625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_rot_i32 19635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_rotl_i32, ret, arg1, arg2); 19645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else 19655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0, t1; 19665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 19675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i32(); 19685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t1 = tcg_temp_new_i32(); 19695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shl_i32(t0, arg1, arg2); 19705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_subfi_i32(t1, 32, arg2); 19715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shr_i32(t1, arg1, t1); 19725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i32(ret, t0, t1); 19735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 19745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t1); 19755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif 19765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 19775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 19785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotl_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 19798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 19805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_rot_i64 19815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_rotl_i64, ret, arg1, arg2); 19825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else 19835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0, t1; 19845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 19855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i64(); 19865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t1 = tcg_temp_new_i64(); 19875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shl_i64(t0, arg1, arg2); 19885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_subfi_i64(t1, 64, arg2); 19895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shr_i64(t1, arg1, t1); 19905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i64(ret, t0, t1); 19915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 19925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t1); 19935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif 19948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 19955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 19965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotli_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2) 19975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 19985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner /* some cases can be optimized here */ 19995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner if (arg2 == 0) { 20005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(ret, arg1); 20015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } else { 20025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_rot_i32 20035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0 = tcg_const_i32(arg2); 20045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_rotl_i32(ret, arg1, t0); 20055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 20065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else 20075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0, t1; 20085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i32(); 20095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t1 = tcg_temp_new_i32(); 20105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shli_i32(t0, arg1, arg2); 20115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shri_i32(t1, arg1, 32 - arg2); 20125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i32(ret, t0, t1); 20135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 20145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t1); 20158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 20165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } 20175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 20185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 20195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotli_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 20205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 20215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner /* some cases can be optimized here */ 20225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner if (arg2 == 0) { 20235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i64(ret, arg1); 20245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } else { 20255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_rot_i64 20265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0 = tcg_const_i64(arg2); 20275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_rotl_i64(ret, arg1, t0); 20285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 20295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else 20305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0, t1; 20315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i64(); 20325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t1 = tcg_temp_new_i64(); 20335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shli_i64(t0, arg1, arg2); 20345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shri_i64(t1, arg1, 64 - arg2); 20355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i64(ret, t0, t1); 20365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 20375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t1); 20385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif 20395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } 20405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 20415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 20425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotr_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 20435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 20445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_rot_i32 20455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_rotr_i32, ret, arg1, arg2); 20465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else 20475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0, t1; 20485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 20495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i32(); 20505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t1 = tcg_temp_new_i32(); 20515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shr_i32(t0, arg1, arg2); 20525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_subfi_i32(t1, 32, arg2); 20535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shl_i32(t1, arg1, t1); 20545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i32(ret, t0, t1); 20555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 20565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t1); 20575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif 20585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 20595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 20605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotr_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 20615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 20625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_rot_i64 20635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_rotr_i64, ret, arg1, arg2); 20645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else 20655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0, t1; 20665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 20675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i64(); 20685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t1 = tcg_temp_new_i64(); 2069ddf49e53df97a349f42c733059165dc73c9907dcDavid 'Digit' Turner tcg_gen_shr_i64(t0, arg1, arg2); 20705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_subfi_i64(t1, 64, arg2); 20715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shl_i64(t1, arg1, t1); 20725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i64(ret, t0, t1); 20735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 20745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t1); 20755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif 20765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 20775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 20785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotri_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2) 20795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 20805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner /* some cases can be optimized here */ 20815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner if (arg2 == 0) { 20825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(ret, arg1); 20835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } else { 20845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_rotli_i32(ret, arg1, 32 - arg2); 20855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } 20865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 20875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 20885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotri_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 20895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 20905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner /* some cases can be optimized here */ 20915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner if (arg2 == 0) { 20925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i64(ret, arg1); 20935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } else { 20945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_rotli_i64(ret, arg1, 64 - arg2); 20955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } 20965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 20978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 2098f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_deposit_i32(TCGv_i32 ret, TCGv_i32 arg1, 2099f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner TCGv_i32 arg2, unsigned int ofs, 2100f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner unsigned int len) 2101f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner{ 2102f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#ifdef TCG_TARGET_HAS_deposit_i32 2103f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_op5ii_i32(INDEX_op_deposit_i32, ret, arg1, arg2, ofs, len); 2104f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#else 2105f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner uint32_t mask = (1u << len) - 1; 2106f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner TCGv_i32 t1 = tcg_temp_new_i32 (); 2107f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 2108f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_andi_i32(t1, arg2, mask); 2109f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_shli_i32(t1, t1, ofs); 2110f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_andi_i32(ret, arg1, ~(mask << ofs)); 2111f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_or_i32(ret, ret, t1); 2112f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 2113f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_temp_free_i32(t1); 2114f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#endif 2115f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner} 2116f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 2117f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turnerstatic inline void tcg_gen_deposit_i64(TCGv_i64 ret, TCGv_i64 arg1, 2118f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner TCGv_i64 arg2, unsigned int ofs, 2119f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner unsigned int len) 2120f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner{ 2121f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#ifdef TCG_TARGET_HAS_deposit_i64 2122f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_op5ii_i64(INDEX_op_deposit_i64, ret, arg1, arg2, ofs, len); 2123f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#else 2124f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner uint64_t mask = (1ull << len) - 1; 2125f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner TCGv_i64 t1 = tcg_temp_new_i64 (); 2126f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 2127f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_andi_i64(t1, arg2, mask); 2128f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_shli_i64(t1, t1, ofs); 2129f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_andi_i64(ret, arg1, ~(mask << ofs)); 2130f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_or_i64(ret, ret, t1); 2131f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 2132f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_temp_free_i64(t1); 2133f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#endif 2134f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner} 2135f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner 21368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/***************************************/ 21378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* QEMU specific operations. Their type depend on the QEMU CPU 21388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project type. */ 21398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef TARGET_LONG_BITS 21408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#error must include QEMU headers 21418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 21428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 21435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#if TARGET_LONG_BITS == 32 21445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCGv TCGv_i32 21455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_temp_new() tcg_temp_new_i32() 21465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_global_reg_new tcg_global_reg_new_i32 21475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_global_mem_new tcg_global_mem_new_i32 21485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_temp_local_new() tcg_temp_local_new_i32() 21495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_temp_free tcg_temp_free_i32 21505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_qemu_ldst_op tcg_gen_op3i_i32 21515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_qemu_ldst_op_i64 tcg_gen_qemu_ldst_op_i64_i32 21525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCGV_UNUSED(x) TCGV_UNUSED_I32(x) 21535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCGV_EQUAL(a, b) TCGV_EQUAL_I32(a, b) 21545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else 21555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCGv TCGv_i64 21565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_temp_new() tcg_temp_new_i64() 21575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_global_reg_new tcg_global_reg_new_i64 21585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_global_mem_new tcg_global_mem_new_i64 21595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_temp_local_new() tcg_temp_local_new_i64() 21605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_temp_free tcg_temp_free_i64 21615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_qemu_ldst_op tcg_gen_op3i_i64 21625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_qemu_ldst_op_i64 tcg_gen_qemu_ldst_op_i64_i64 21635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCGV_UNUSED(x) TCGV_UNUSED_I64(x) 21645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCGV_EQUAL(a, b) TCGV_EQUAL_I64(a, b) 21655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif 21665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 21678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* debug info: write the PC of the corresponding QEMU CPU instruction */ 21688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_debug_insn_start(uint64_t pc) 21698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 21708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project /* XXX: must really use a 32 bit size for TCGArg in all cases */ 21718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS > TCG_TARGET_REG_BITS 21728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_op2ii(INDEX_op_debug_insn_start, 21738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project (uint32_t)(pc), (uint32_t)(pc >> 32)); 21748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 21758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_op1i(INDEX_op_debug_insn_start, pc); 21768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 21778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 21788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 21798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_exit_tb(tcg_target_long val) 21808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 21818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_op1i(INDEX_op_exit_tb, val); 21828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 21838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 21848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_goto_tb(int idx) 21858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 21868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_op1i(INDEX_op_goto_tb, idx); 21878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 21888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 21898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TCG_TARGET_REG_BITS == 32 21908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld8u(TCGv ret, TCGv addr, int mem_index) 21918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 21928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32 21935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3i_i32(INDEX_op_qemu_ld8u, ret, addr, mem_index); 21948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 21955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op4i_i32(INDEX_op_qemu_ld8u, TCGV_LOW(ret), TCGV_LOW(addr), 21965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_HIGH(addr), mem_index); 21978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i32(TCGV_HIGH(ret), 0); 21988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 21998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 22008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 22018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld8s(TCGv ret, TCGv addr, int mem_index) 22028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 22038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32 22045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3i_i32(INDEX_op_qemu_ld8s, ret, addr, mem_index); 22058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 22065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op4i_i32(INDEX_op_qemu_ld8s, TCGV_LOW(ret), TCGV_LOW(addr), 22075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_HIGH(addr), mem_index); 22085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31); 22098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 22108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 22118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 22128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld16u(TCGv ret, TCGv addr, int mem_index) 22138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 22148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32 22155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3i_i32(INDEX_op_qemu_ld16u, ret, addr, mem_index); 22168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 22175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op4i_i32(INDEX_op_qemu_ld16u, TCGV_LOW(ret), TCGV_LOW(addr), 22185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_HIGH(addr), mem_index); 22198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i32(TCGV_HIGH(ret), 0); 22208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 22218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 22228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 22238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld16s(TCGv ret, TCGv addr, int mem_index) 22248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 22258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32 22265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3i_i32(INDEX_op_qemu_ld16s, ret, addr, mem_index); 22278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 22285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op4i_i32(INDEX_op_qemu_ld16s, TCGV_LOW(ret), TCGV_LOW(addr), 22295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_HIGH(addr), mem_index); 22305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31); 22318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 22328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 22338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 22348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld32u(TCGv ret, TCGv addr, int mem_index) 22358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 22368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32 2237f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_op3i_i32(INDEX_op_qemu_ld32, ret, addr, mem_index); 22388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 2239f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_op4i_i32(INDEX_op_qemu_ld32, TCGV_LOW(ret), TCGV_LOW(addr), 22405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_HIGH(addr), mem_index); 22418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i32(TCGV_HIGH(ret), 0); 22428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 22438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 22448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 22458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld32s(TCGv ret, TCGv addr, int mem_index) 22468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 22478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32 2248f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_op3i_i32(INDEX_op_qemu_ld32, ret, addr, mem_index); 22498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 2250f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_op4i_i32(INDEX_op_qemu_ld32, TCGV_LOW(ret), TCGV_LOW(addr), 22515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_HIGH(addr), mem_index); 22525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31); 22538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 22548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 22558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 22565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_qemu_ld64(TCGv_i64 ret, TCGv addr, int mem_index) 22578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 22588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32 22595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op4i_i32(INDEX_op_qemu_ld64, TCGV_LOW(ret), TCGV_HIGH(ret), addr, mem_index); 22608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 22615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op5i_i32(INDEX_op_qemu_ld64, TCGV_LOW(ret), TCGV_HIGH(ret), 22625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_LOW(addr), TCGV_HIGH(addr), mem_index); 22638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 22648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 22658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 22668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st8(TCGv arg, TCGv addr, int mem_index) 22678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 22688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32 22695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3i_i32(INDEX_op_qemu_st8, arg, addr, mem_index); 22708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 22715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op4i_i32(INDEX_op_qemu_st8, TCGV_LOW(arg), TCGV_LOW(addr), 22725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_HIGH(addr), mem_index); 22738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 22748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 22758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 22768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st16(TCGv arg, TCGv addr, int mem_index) 22778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 22788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32 22795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3i_i32(INDEX_op_qemu_st16, arg, addr, mem_index); 22808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 22815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op4i_i32(INDEX_op_qemu_st16, TCGV_LOW(arg), TCGV_LOW(addr), 22825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_HIGH(addr), mem_index); 22838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 22848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 22858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 22868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st32(TCGv arg, TCGv addr, int mem_index) 22878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 22888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32 22895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3i_i32(INDEX_op_qemu_st32, arg, addr, mem_index); 22908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 22915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op4i_i32(INDEX_op_qemu_st32, TCGV_LOW(arg), TCGV_LOW(addr), 22925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_HIGH(addr), mem_index); 22938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 22948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 22958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 22965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_qemu_st64(TCGv_i64 arg, TCGv addr, int mem_index) 22978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 22988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32 22995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op4i_i32(INDEX_op_qemu_st64, TCGV_LOW(arg), TCGV_HIGH(arg), addr, 23005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner mem_index); 23018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 23025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op5i_i32(INDEX_op_qemu_st64, TCGV_LOW(arg), TCGV_HIGH(arg), 23035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_LOW(addr), TCGV_HIGH(addr), mem_index); 23048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 23058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 23068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 23078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld_ptr tcg_gen_ld_i32 23088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_discard_ptr tcg_gen_discard_i32 23098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 23108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else /* TCG_TARGET_REG_BITS == 32 */ 23118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 23128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld8u(TCGv ret, TCGv addr, int mem_index) 23138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 23145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld8u, ret, addr, mem_index); 23158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 23168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 23178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld8s(TCGv ret, TCGv addr, int mem_index) 23188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 23195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld8s, ret, addr, mem_index); 23208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 23218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 23228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld16u(TCGv ret, TCGv addr, int mem_index) 23238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 23245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld16u, ret, addr, mem_index); 23258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 23268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 23278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld16s(TCGv ret, TCGv addr, int mem_index) 23288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 23295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld16s, ret, addr, mem_index); 23308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 23318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 23328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld32u(TCGv ret, TCGv addr, int mem_index) 23338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 2334f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#if TARGET_LONG_BITS == 32 2335f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld32, ret, addr, mem_index); 2336f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#else 23375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld32u, ret, addr, mem_index); 2338f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#endif 23398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 23408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 23418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld32s(TCGv ret, TCGv addr, int mem_index) 23428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 2343f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#if TARGET_LONG_BITS == 32 2344f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld32, ret, addr, mem_index); 2345f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#else 23465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld32s, ret, addr, mem_index); 2347f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#endif 23488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 23498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 23505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_qemu_ld64(TCGv_i64 ret, TCGv addr, int mem_index) 23518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 23525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_qemu_ldst_op_i64(INDEX_op_qemu_ld64, ret, addr, mem_index); 23538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 23548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 23558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st8(TCGv arg, TCGv addr, int mem_index) 23568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 23575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_qemu_ldst_op(INDEX_op_qemu_st8, arg, addr, mem_index); 23588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 23598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 23608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st16(TCGv arg, TCGv addr, int mem_index) 23618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 23625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_qemu_ldst_op(INDEX_op_qemu_st16, arg, addr, mem_index); 23638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 23648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 23658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st32(TCGv arg, TCGv addr, int mem_index) 23668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 23675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_qemu_ldst_op(INDEX_op_qemu_st32, arg, addr, mem_index); 23688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 23698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 23705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_qemu_st64(TCGv_i64 arg, TCGv addr, int mem_index) 23718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 23725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_qemu_ldst_op_i64(INDEX_op_qemu_st64, arg, addr, mem_index); 23738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 23748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 23758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld_ptr tcg_gen_ld_i64 23768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_discard_ptr tcg_gen_discard_i64 23778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 23788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif /* TCG_TARGET_REG_BITS != 32 */ 23798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 23808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 64 23818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_movi_tl tcg_gen_movi_i64 23828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_mov_tl tcg_gen_mov_i64 23838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld8u_tl tcg_gen_ld8u_i64 23848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld8s_tl tcg_gen_ld8s_i64 23858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld16u_tl tcg_gen_ld16u_i64 23868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld16s_tl tcg_gen_ld16s_i64 23878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld32u_tl tcg_gen_ld32u_i64 23888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld32s_tl tcg_gen_ld32s_i64 23898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld_tl tcg_gen_ld_i64 23908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st8_tl tcg_gen_st8_i64 23918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st16_tl tcg_gen_st16_i64 23928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st32_tl tcg_gen_st32_i64 23938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st_tl tcg_gen_st_i64 23948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_add_tl tcg_gen_add_i64 23958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_addi_tl tcg_gen_addi_i64 23968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sub_tl tcg_gen_sub_i64 23978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_neg_tl tcg_gen_neg_i64 23985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_subfi_tl tcg_gen_subfi_i64 23998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_subi_tl tcg_gen_subi_i64 24008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_and_tl tcg_gen_and_i64 24018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_andi_tl tcg_gen_andi_i64 24028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_or_tl tcg_gen_or_i64 24038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ori_tl tcg_gen_ori_i64 24048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_xor_tl tcg_gen_xor_i64 24058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_xori_tl tcg_gen_xori_i64 24068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_not_tl tcg_gen_not_i64 24078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shl_tl tcg_gen_shl_i64 24088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shli_tl tcg_gen_shli_i64 24098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shr_tl tcg_gen_shr_i64 24108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shri_tl tcg_gen_shri_i64 24118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sar_tl tcg_gen_sar_i64 24128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sari_tl tcg_gen_sari_i64 24138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_brcond_tl tcg_gen_brcond_i64 24148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_brcondi_tl tcg_gen_brcondi_i64 2415b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#define tcg_gen_setcond_tl tcg_gen_setcond_i64 2416b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#define tcg_gen_setcondi_tl tcg_gen_setcondi_i64 24178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_mul_tl tcg_gen_mul_i64 24188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_muli_tl tcg_gen_muli_i64 24195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_div_tl tcg_gen_div_i64 24205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rem_tl tcg_gen_rem_i64 24215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_divu_tl tcg_gen_divu_i64 24225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_remu_tl tcg_gen_remu_i64 24238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_discard_tl tcg_gen_discard_i64 24248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_trunc_tl_i32 tcg_gen_trunc_i64_i32 24258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_trunc_i64_tl tcg_gen_mov_i64 24268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_extu_i32_tl tcg_gen_extu_i32_i64 24278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_i32_tl tcg_gen_ext_i32_i64 24288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_extu_tl_i64 tcg_gen_mov_i64 24298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_tl_i64 tcg_gen_mov_i64 24308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext8u_tl tcg_gen_ext8u_i64 24318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext8s_tl tcg_gen_ext8s_i64 24328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext16u_tl tcg_gen_ext16u_i64 24338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext16s_tl tcg_gen_ext16s_i64 24348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext32u_tl tcg_gen_ext32u_i64 24358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext32s_tl tcg_gen_ext32s_i64 24365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_bswap16_tl tcg_gen_bswap16_i64 24375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_bswap32_tl tcg_gen_bswap32_i64 24385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_bswap64_tl tcg_gen_bswap64_i64 24395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_concat_tl_i64 tcg_gen_concat32_i64 24405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_andc_tl tcg_gen_andc_i64 24415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_eqv_tl tcg_gen_eqv_i64 24425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_nand_tl tcg_gen_nand_i64 24435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_nor_tl tcg_gen_nor_i64 24445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_orc_tl tcg_gen_orc_i64 24455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotl_tl tcg_gen_rotl_i64 24465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotli_tl tcg_gen_rotli_i64 24475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotr_tl tcg_gen_rotr_i64 24485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotri_tl tcg_gen_rotri_i64 2449f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#define tcg_gen_deposit_tl tcg_gen_deposit_i64 24508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_const_tl tcg_const_i64 24515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_const_local_tl tcg_const_local_i64 24528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 24538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_movi_tl tcg_gen_movi_i32 24548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_mov_tl tcg_gen_mov_i32 24558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld8u_tl tcg_gen_ld8u_i32 24568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld8s_tl tcg_gen_ld8s_i32 24578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld16u_tl tcg_gen_ld16u_i32 24588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld16s_tl tcg_gen_ld16s_i32 24598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld32u_tl tcg_gen_ld_i32 24608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld32s_tl tcg_gen_ld_i32 24618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld_tl tcg_gen_ld_i32 24628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st8_tl tcg_gen_st8_i32 24638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st16_tl tcg_gen_st16_i32 24648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st32_tl tcg_gen_st_i32 24658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st_tl tcg_gen_st_i32 24668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_add_tl tcg_gen_add_i32 24678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_addi_tl tcg_gen_addi_i32 24688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sub_tl tcg_gen_sub_i32 24698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_neg_tl tcg_gen_neg_i32 24705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_subfi_tl tcg_gen_subfi_i32 24718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_subi_tl tcg_gen_subi_i32 24728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_and_tl tcg_gen_and_i32 24738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_andi_tl tcg_gen_andi_i32 24748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_or_tl tcg_gen_or_i32 24758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ori_tl tcg_gen_ori_i32 24768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_xor_tl tcg_gen_xor_i32 24778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_xori_tl tcg_gen_xori_i32 24788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_not_tl tcg_gen_not_i32 24798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shl_tl tcg_gen_shl_i32 24808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shli_tl tcg_gen_shli_i32 24818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shr_tl tcg_gen_shr_i32 24828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shri_tl tcg_gen_shri_i32 24838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sar_tl tcg_gen_sar_i32 24848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sari_tl tcg_gen_sari_i32 24858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_brcond_tl tcg_gen_brcond_i32 24868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_brcondi_tl tcg_gen_brcondi_i32 2487b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#define tcg_gen_setcond_tl tcg_gen_setcond_i32 2488b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#define tcg_gen_setcondi_tl tcg_gen_setcondi_i32 24898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_mul_tl tcg_gen_mul_i32 24908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_muli_tl tcg_gen_muli_i32 24915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_div_tl tcg_gen_div_i32 24925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rem_tl tcg_gen_rem_i32 24935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_divu_tl tcg_gen_divu_i32 24945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_remu_tl tcg_gen_remu_i32 24958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_discard_tl tcg_gen_discard_i32 24968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_trunc_tl_i32 tcg_gen_mov_i32 24978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_trunc_i64_tl tcg_gen_trunc_i64_i32 24988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_extu_i32_tl tcg_gen_mov_i32 24998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_i32_tl tcg_gen_mov_i32 25008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_extu_tl_i64 tcg_gen_extu_i32_i64 25018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_tl_i64 tcg_gen_ext_i32_i64 25028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext8u_tl tcg_gen_ext8u_i32 25038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext8s_tl tcg_gen_ext8s_i32 25048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext16u_tl tcg_gen_ext16u_i32 25058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext16s_tl tcg_gen_ext16s_i32 25068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext32u_tl tcg_gen_mov_i32 25078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext32s_tl tcg_gen_mov_i32 25085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_bswap16_tl tcg_gen_bswap16_i32 25095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_bswap32_tl tcg_gen_bswap32_i32 25105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_concat_tl_i64 tcg_gen_concat_i32_i64 25115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_andc_tl tcg_gen_andc_i32 25125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_eqv_tl tcg_gen_eqv_i32 25135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_nand_tl tcg_gen_nand_i32 25145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_nor_tl tcg_gen_nor_i32 25155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_orc_tl tcg_gen_orc_i32 25165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotl_tl tcg_gen_rotl_i32 25175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotli_tl tcg_gen_rotli_i32 25185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotr_tl tcg_gen_rotr_i32 25195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotri_tl tcg_gen_rotri_i32 2520f1d9bf153726533acf659efd796aa484dfd0b412David 'Digit' Turner#define tcg_gen_deposit_tl tcg_gen_deposit_i32 25218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_const_tl tcg_const_i32 25225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_const_local_tl tcg_const_local_i32 25238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 25248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 25258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TCG_TARGET_REG_BITS == 32 25268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_add_ptr tcg_gen_add_i32 25278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_addi_ptr tcg_gen_addi_i32 25288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_i32_ptr tcg_gen_mov_i32 25298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else /* TCG_TARGET_REG_BITS == 32 */ 25308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_add_ptr tcg_gen_add_i64 25318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_addi_ptr tcg_gen_addi_i64 25328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_i32_ptr tcg_gen_ext_i32_i64 25338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif /* TCG_TARGET_REG_BITS != 32 */ 2534