tcg-op.h revision b9317727862dd690cc67bb51f71991c404f9e4f6
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 285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op1_i32(int 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 345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op1_i64(int 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 408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_op1i(int 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 465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op2_i32(int 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 535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op2_i64(int 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 605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op2i_i32(int 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 675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op2i_i64(int 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 748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_op2ii(int 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 815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op3_i32(int 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 905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op3_i64(int 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 995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op3i_i32(int opc, TCGv_i32 arg1, TCGv_i32 arg2, 1005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 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 1085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op3i_i64(int opc, TCGv_i64 arg1, TCGv_i64 arg2, 1095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 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 1175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ldst_op_i32(int opc, TCGv_i32 val, TCGv_ptr base, 1185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 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 1265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ldst_op_i64(int opc, TCGv_i64 val, TCGv_ptr base, 1275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 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 1355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_qemu_ldst_op_i64_i32(int opc, TCGv_i64 val, TCGv_i32 addr, 1365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 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 1445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_qemu_ldst_op_i64_i64(int opc, TCGv_i64 val, TCGv_i64 addr, 1455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 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 1535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op4_i32(int 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 1635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op4_i64(int 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 1735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op4i_i32(int 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 1835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op4i_i64(int 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 1935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op4ii_i32(int 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 2035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op4ii_i64(int 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 2135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op5_i32(int 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 2245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op5_i64(int 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 2355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op5i_i32(int 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 2465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op5i_i64(int 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 2575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op6_i32(int opc, TCGv_i32 arg1, TCGv_i32 arg2, 2585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 arg3, TCGv_i32 arg4, TCGv_i32 arg5, 2595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 arg6) 2605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 2615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opc_ptr++ = opc; 2625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg1); 2635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg2); 2645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg3); 2655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg4); 2665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg5); 2675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg6); 2688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 2698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 2705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op6_i64(int opc, TCGv_i64 arg1, TCGv_i64 arg2, 2715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 arg3, TCGv_i64 arg4, TCGv_i64 arg5, 2725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 arg6) 2738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 2748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *gen_opc_ptr++ = opc; 2755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg1); 2765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg2); 2775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg3); 2785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg4); 2795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg5); 2805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg6); 2815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 2825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 283b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turnerstatic inline void tcg_gen_op6i_i32(int opc, TCGv_i32 arg1, TCGv_i32 arg2, 284b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner TCGv_i32 arg3, TCGv_i32 arg4, 285b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner TCGv_i32 arg5, TCGArg arg6) 286b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner{ 287b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner *gen_opc_ptr++ = opc; 288b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg1); 289b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg2); 290b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg3); 291b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg4); 292b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg5); 293b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner *gen_opparam_ptr++ = arg6; 294b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner} 295b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner 296b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turnerstatic inline void tcg_gen_op6i_i64(int opc, TCGv_i64 arg1, TCGv_i64 arg2, 297b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner TCGv_i64 arg3, TCGv_i64 arg4, 298b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner TCGv_i64 arg5, TCGArg arg6) 299b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner{ 300b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner *gen_opc_ptr++ = opc; 301b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg1); 302b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg2); 303b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg3); 304b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg4); 305b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg5); 306b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner *gen_opparam_ptr++ = arg6; 307b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner} 308b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner 3095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op6ii_i32(int opc, TCGv_i32 arg1, TCGv_i32 arg2, 3105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 arg3, TCGv_i32 arg4, TCGArg arg5, 3115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGArg arg6) 3125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 3135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opc_ptr++ = opc; 3145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg1); 3155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg2); 3165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg3); 3175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I32(arg4); 3185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = arg5; 3195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = arg6; 3205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 3215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 3225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_op6ii_i64(int opc, TCGv_i64 arg1, TCGv_i64 arg2, 3235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 arg3, TCGv_i64 arg4, TCGArg arg5, 3245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGArg arg6) 3255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 3265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opc_ptr++ = opc; 3275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg1); 3285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg2); 3295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg3); 3305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner *gen_opparam_ptr++ = GET_TCGV_I64(arg4); 3318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *gen_opparam_ptr++ = arg5; 3328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *gen_opparam_ptr++ = arg6; 3338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 3348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 3358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void gen_set_label(int n) 3368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 3378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_op1i(INDEX_op_set_label, n); 3388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 3398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 3408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_br(int label) 3418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 3428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_op1i(INDEX_op_br, label); 3438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 3448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 3455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_mov_i32(TCGv_i32 ret, TCGv_i32 arg) 3468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 3475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner if (!TCGV_EQUAL_I32(ret, arg)) 3485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i32(INDEX_op_mov_i32, ret, arg); 3498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 3508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 3515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_movi_i32(TCGv_i32 ret, int32_t arg) 3528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 3535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2i_i32(INDEX_op_movi_i32, ret, arg); 3548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 3558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 3568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* helper calls */ 3575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_helperN(void *func, int flags, int sizemask, 3585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGArg ret, int nargs, TCGArg *args) 3595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 3605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_ptr fn; 3615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner fn = tcg_const_ptr((tcg_target_long)func); 3625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_callN(&tcg_ctx, fn, flags, sizemask, ret, 3635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner nargs, args); 3645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_ptr(fn); 3655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 3668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 3675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* FIXME: Should this be pure? */ 3685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_helper64(void *func, TCGv_i64 ret, 3695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 a, TCGv_i64 b) 3708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 3715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_ptr fn; 3725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGArg args[2]; 3735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner fn = tcg_const_ptr((tcg_target_long)func); 3745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner args[0] = GET_TCGV_I64(a); 3755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner args[1] = GET_TCGV_I64(b); 3765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_callN(&tcg_ctx, fn, 0, 7, GET_TCGV_I64(ret), 2, args); 3775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_ptr(fn); 3788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 3798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 3808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* 32 bit ops */ 3818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 3825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld8u_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset) 3838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 3845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i32(INDEX_op_ld8u_i32, ret, arg2, offset); 3858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 3868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 3875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld8s_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset) 3888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 3895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i32(INDEX_op_ld8s_i32, ret, arg2, offset); 3908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 3918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 3925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld16u_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset) 3938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 3945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i32(INDEX_op_ld16u_i32, ret, arg2, offset); 3958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 3968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 3975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld16s_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset) 3988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 3995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i32(INDEX_op_ld16s_i32, ret, arg2, offset); 4008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 4018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 4025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset) 4038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 4045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i32(INDEX_op_ld_i32, ret, arg2, offset); 4058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 4068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 4075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st8_i32(TCGv_i32 arg1, TCGv_ptr arg2, tcg_target_long offset) 4088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 4095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i32(INDEX_op_st8_i32, arg1, arg2, offset); 4108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 4118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 4125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st16_i32(TCGv_i32 arg1, TCGv_ptr arg2, tcg_target_long offset) 4138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 4145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i32(INDEX_op_st16_i32, arg1, arg2, offset); 4158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 4168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 4175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st_i32(TCGv_i32 arg1, TCGv_ptr arg2, tcg_target_long offset) 4188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 4195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i32(INDEX_op_st_i32, arg1, arg2, offset); 4208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 4218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 4225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_add_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 4238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 4245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_add_i32, ret, arg1, arg2); 4258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 4268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 4275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_addi_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2) 4288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 4298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project /* some cases can be optimized here */ 4308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (arg2 == 0) { 4318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_mov_i32(ret, arg1); 4328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } else { 4335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0 = tcg_const_i32(arg2); 4348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_add_i32(ret, arg1, t0); 4355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 4368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 4378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 4388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 4395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sub_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 4408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 4415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_sub_i32, ret, arg1, arg2); 4428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 4438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 4445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_subfi_i32(TCGv_i32 ret, int32_t arg1, TCGv_i32 arg2) 4455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 4465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0 = tcg_const_i32(arg1); 4475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_sub_i32(ret, t0, arg2); 4485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 4495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 4505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 4515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_subi_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2) 4528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 4538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project /* some cases can be optimized here */ 4548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (arg2 == 0) { 4558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_mov_i32(ret, arg1); 4568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } else { 4575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0 = tcg_const_i32(arg2); 4588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_sub_i32(ret, arg1, t0); 4595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 4608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 4618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 4628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 4635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_and_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 4648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 4655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner if (TCGV_EQUAL_I32(arg1, arg2)) { 4665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(ret, arg1); 4675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } else { 4685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_and_i32, ret, arg1, arg2); 4695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } 4708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 4718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 4725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_andi_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2) 4738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 4748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project /* some cases can be optimized here */ 4758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (arg2 == 0) { 4768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i32(ret, 0); 4778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } else if (arg2 == 0xffffffff) { 4788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_mov_i32(ret, arg1); 4798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } else { 4805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0 = tcg_const_i32(arg2); 4818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_and_i32(ret, arg1, t0); 4825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 4838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 4848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 4858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 4865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_or_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 4878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 4885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner if (TCGV_EQUAL_I32(arg1, arg2)) { 4895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(ret, arg1); 4905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } else { 4915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_or_i32, ret, arg1, arg2); 4925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } 4938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 4948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 4955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ori_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2) 4968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 4978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project /* some cases can be optimized here */ 4988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (arg2 == 0xffffffff) { 4998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i32(ret, 0xffffffff); 5008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } else if (arg2 == 0) { 5018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_mov_i32(ret, arg1); 5028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } else { 5035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0 = tcg_const_i32(arg2); 5048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_or_i32(ret, arg1, t0); 5055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 5068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 5078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 5088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 5095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_xor_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 5108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 5115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner if (TCGV_EQUAL_I32(arg1, arg2)) { 5125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_movi_i32(ret, 0); 5135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } else { 5145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_xor_i32, ret, arg1, arg2); 5155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } 5168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 5178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 5185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_xori_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2) 5198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 5208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project /* some cases can be optimized here */ 5218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (arg2 == 0) { 5228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_mov_i32(ret, arg1); 5238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } else { 5245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0 = tcg_const_i32(arg2); 5258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_xor_i32(ret, arg1, t0); 5265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 5278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 5288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 5298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 5305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shl_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 5318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 5325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_shl_i32, ret, arg1, arg2); 5338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 5348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 5355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shli_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2) 5368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 5378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (arg2 == 0) { 5388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_mov_i32(ret, arg1); 5398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } else { 5405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0 = tcg_const_i32(arg2); 5418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shl_i32(ret, arg1, t0); 5425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 5438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 5448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 5458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 5465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shr_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 5478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 5485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_shr_i32, ret, arg1, arg2); 5498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 5508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 5515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shri_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2) 5528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 5538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (arg2 == 0) { 5548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_mov_i32(ret, arg1); 5558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } else { 5565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0 = tcg_const_i32(arg2); 5578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shr_i32(ret, arg1, t0); 5585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 5598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 5608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 5618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 5625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sar_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 5638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 5645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_sar_i32, ret, arg1, arg2); 5658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 5668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 5675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sari_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2) 5688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 5698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (arg2 == 0) { 5708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_mov_i32(ret, arg1); 5718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } else { 5725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0 = tcg_const_i32(arg2); 5738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_sar_i32(ret, arg1, t0); 5745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 5758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 5768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 5778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 5785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_brcond_i32(int cond, TCGv_i32 arg1, TCGv_i32 arg2, 5798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int label_index) 5808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 5815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op4ii_i32(INDEX_op_brcond_i32, arg1, arg2, cond, label_index); 5828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 5838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 5845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_brcondi_i32(int cond, TCGv_i32 arg1, int32_t arg2, 5858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int label_index) 5868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 5875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0 = tcg_const_i32(arg2); 5888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_brcond_i32(cond, arg1, t0, label_index); 5895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 5908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 5918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 592b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turnerstatic inline void tcg_gen_setcond_i32(int cond, TCGv_i32 ret, 593b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner TCGv_i32 arg1, TCGv_i32 arg2) 594b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner{ 595b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_op4i_i32(INDEX_op_setcond_i32, ret, arg1, arg2, cond); 596b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner} 597b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner 598b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turnerstatic inline void tcg_gen_setcondi_i32(int cond, TCGv_i32 ret, TCGv_i32 arg1, 599b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner int32_t arg2) 600b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner{ 601b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner TCGv_i32 t0 = tcg_const_i32(arg2); 602b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_setcond_i32(cond, ret, arg1, t0); 603b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_temp_free_i32(t0); 604b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner} 605b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner 6065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_mul_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 6078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 6085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_mul_i32, ret, arg1, arg2); 6098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 6108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 6115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_muli_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2) 6128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 6135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0 = tcg_const_i32(arg2); 6148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_mul_i32(ret, arg1, t0); 6155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 6168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 6178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 6188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_div_i32 6195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_div_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 6208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 6215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_div_i32, ret, arg1, arg2); 6228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 6238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 6245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rem_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 6258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 6265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_rem_i32, ret, arg1, arg2); 6278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 6288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 6295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_divu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 6308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 6315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_divu_i32, ret, arg1, arg2); 6328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 6338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 6345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_remu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 6358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 6365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_remu_i32, ret, arg1, arg2); 6378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 6388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 6395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_div_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 6408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 6415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0; 6425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i32(); 6438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_sari_i32(t0, arg1, 31); 6445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op5_i32(INDEX_op_div2_i32, ret, t0, arg1, t0, arg2); 6455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 6468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 6478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 6485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rem_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 6498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 6505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0; 6515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i32(); 6528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_sari_i32(t0, arg1, 31); 6535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op5_i32(INDEX_op_div2_i32, t0, ret, arg1, t0, arg2); 6545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 6558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 6568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 6575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_divu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 6588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 6595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0; 6605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i32(); 6618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i32(t0, 0); 6625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op5_i32(INDEX_op_divu2_i32, ret, t0, arg1, t0, arg2); 6635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 6648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 6658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 6665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_remu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 6678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 6685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0; 6695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i32(); 6708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i32(t0, 0); 6715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op5_i32(INDEX_op_divu2_i32, t0, ret, arg1, t0, arg2); 6725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 6738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 6748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 6758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 6768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TCG_TARGET_REG_BITS == 32 6778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 6785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_mov_i64(TCGv_i64 ret, TCGv_i64 arg) 6798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 6805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner if (!TCGV_EQUAL_I64(ret, arg)) { 6815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(TCGV_LOW(ret), TCGV_LOW(arg)); 6828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_mov_i32(TCGV_HIGH(ret), TCGV_HIGH(arg)); 6838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 6848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 6858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 6865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_movi_i64(TCGv_i64 ret, int64_t arg) 6878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 6885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_movi_i32(TCGV_LOW(ret), arg); 6898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i32(TCGV_HIGH(ret), arg >> 32); 6908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 6918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 6925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld8u_i64(TCGv_i64 ret, TCGv_ptr arg2, 6935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_target_long offset) 6948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 6955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ld8u_i32(TCGV_LOW(ret), arg2, offset); 6968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i32(TCGV_HIGH(ret), 0); 6978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 6988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 6995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld8s_i64(TCGv_i64 ret, TCGv_ptr arg2, 7005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_target_long offset) 7018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 7025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ld8s_i32(TCGV_LOW(ret), arg2, offset); 7035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_HIGH(ret), 31); 7048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 7058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 7065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld16u_i64(TCGv_i64 ret, TCGv_ptr arg2, 7075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_target_long offset) 7088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 7095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ld16u_i32(TCGV_LOW(ret), arg2, offset); 7108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i32(TCGV_HIGH(ret), 0); 7118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 7128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 7135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld16s_i64(TCGv_i64 ret, TCGv_ptr arg2, 7145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_target_long offset) 7158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 7165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ld16s_i32(TCGV_LOW(ret), arg2, offset); 7175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31); 7188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 7198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 7205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld32u_i64(TCGv_i64 ret, TCGv_ptr arg2, 7215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_target_long offset) 7228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 7235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ld_i32(TCGV_LOW(ret), arg2, offset); 7248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i32(TCGV_HIGH(ret), 0); 7258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 7268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 7275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld32s_i64(TCGv_i64 ret, TCGv_ptr arg2, 7285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_target_long offset) 7298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 7305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ld_i32(TCGV_LOW(ret), arg2, offset); 7315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31); 7328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 7338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 7345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld_i64(TCGv_i64 ret, TCGv_ptr arg2, 7355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_target_long offset) 7368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 7378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project /* since arg2 and ret have different types, they cannot be the 7388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project same temporary */ 7398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_WORDS_BIGENDIAN 7408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_ld_i32(TCGV_HIGH(ret), arg2, offset); 7415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ld_i32(TCGV_LOW(ret), arg2, offset + 4); 7428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 7435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ld_i32(TCGV_LOW(ret), arg2, offset); 7448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_ld_i32(TCGV_HIGH(ret), arg2, offset + 4); 7458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 7468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 7478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 7485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st8_i64(TCGv_i64 arg1, TCGv_ptr arg2, 7495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_target_long offset) 7508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 7515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_st8_i32(TCGV_LOW(arg1), arg2, offset); 7528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 7538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 7545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st16_i64(TCGv_i64 arg1, TCGv_ptr arg2, 7555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_target_long offset) 7568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 7575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_st16_i32(TCGV_LOW(arg1), arg2, offset); 7588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 7598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 7605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st32_i64(TCGv_i64 arg1, TCGv_ptr arg2, 7615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_target_long offset) 7628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 7635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_st_i32(TCGV_LOW(arg1), arg2, offset); 7648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 7658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 7665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st_i64(TCGv_i64 arg1, TCGv_ptr arg2, 7675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_target_long offset) 7688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 7698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_WORDS_BIGENDIAN 7708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_st_i32(TCGV_HIGH(arg1), arg2, offset); 7715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_st_i32(TCGV_LOW(arg1), arg2, offset + 4); 7728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 7735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_st_i32(TCGV_LOW(arg1), arg2, offset); 7748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_st_i32(TCGV_HIGH(arg1), arg2, offset + 4); 7758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 7768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 7778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 7785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_add_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 7798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 7805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op6_i32(INDEX_op_add2_i32, TCGV_LOW(ret), TCGV_HIGH(ret), 7815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_LOW(arg1), TCGV_HIGH(arg1), TCGV_LOW(arg2), 7825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_HIGH(arg2)); 7838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 7848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 7855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sub_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 7868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 7875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op6_i32(INDEX_op_sub2_i32, TCGV_LOW(ret), TCGV_HIGH(ret), 7885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_LOW(arg1), TCGV_HIGH(arg1), TCGV_LOW(arg2), 7895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_HIGH(arg2)); 7908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 7918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 7925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_and_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 7938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 7945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_and_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2)); 7958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_and_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2)); 7968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 7978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 7985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_andi_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 7998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 8005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_andi_i32(TCGV_LOW(ret), TCGV_LOW(arg1), arg2); 8018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_andi_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), arg2 >> 32); 8028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 8038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 8045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_or_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 8058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 8065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2)); 8078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_or_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2)); 8088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 8098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 8105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ori_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 8118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 8125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ori_i32(TCGV_LOW(ret), TCGV_LOW(arg1), arg2); 8138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_ori_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), arg2 >> 32); 8148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 8158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 8165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_xor_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 8178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 8185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_xor_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2)); 8198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_xor_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2)); 8208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 8218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 8225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_xori_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 8238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 8245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_xori_i32(TCGV_LOW(ret), TCGV_LOW(arg1), arg2); 8258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_xori_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), arg2 >> 32); 8268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 8278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 8288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* XXX: use generic code when basic block handling is OK or CPU 8298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project specific code (x86) */ 8305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shl_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 8318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 8325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_helper64(tcg_helper_shl_i64, ret, arg1, arg2); 8338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 8348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 8355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shli_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 8368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 8378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shifti_i64(ret, arg1, arg2, 0, 0); 8388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 8398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 8405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shr_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 8418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 8425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_helper64(tcg_helper_shr_i64, ret, arg1, arg2); 8438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 8448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 8455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shri_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 8468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 8478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shifti_i64(ret, arg1, arg2, 1, 0); 8488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 8498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 8505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sar_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 8518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 8525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_helper64(tcg_helper_sar_i64, ret, arg1, arg2); 8538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 8548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 8555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sari_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 8568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 8578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shifti_i64(ret, arg1, arg2, 1, 1); 8588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 8598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 8605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_brcond_i64(int cond, TCGv_i64 arg1, TCGv_i64 arg2, 8618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int label_index) 8628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 8635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op6ii_i32(INDEX_op_brcond2_i32, 8645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_LOW(arg1), TCGV_HIGH(arg1), TCGV_LOW(arg2), 8655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_HIGH(arg2), cond, label_index); 8668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 8678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 868b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turnerstatic inline void tcg_gen_setcond_i64(int cond, TCGv_i64 ret, 869b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner TCGv_i64 arg1, TCGv_i64 arg2) 870b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner{ 871b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_op6i_i32(INDEX_op_setcond2_i32, TCGV_LOW(ret), 872b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner TCGV_LOW(arg1), TCGV_HIGH(arg1), 873b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner TCGV_LOW(arg2), TCGV_HIGH(arg2), cond); 874b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_movi_i32(TCGV_HIGH(ret), 0); 875b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner} 876b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner 8775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_mul_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 8788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 8795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0; 8805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t1; 8818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 8825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i64(); 8835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t1 = tcg_temp_new_i32(); 8845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 8855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op4_i32(INDEX_op_mulu2_i32, TCGV_LOW(t0), TCGV_HIGH(t0), 8865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_LOW(arg1), TCGV_LOW(arg2)); 8875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 8885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mul_i32(t1, TCGV_LOW(arg1), TCGV_HIGH(arg2)); 8898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_add_i32(TCGV_HIGH(t0), TCGV_HIGH(t0), t1); 8905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mul_i32(t1, TCGV_HIGH(arg1), TCGV_LOW(arg2)); 8918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_add_i32(TCGV_HIGH(t0), TCGV_HIGH(t0), t1); 8928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 8935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i64(ret, t0); 8945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 8955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t1); 8968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 8978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 8985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_div_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 8998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 9005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_helper64(tcg_helper_div_i64, ret, arg1, arg2); 9018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 9028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 9035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rem_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 9048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 9055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_helper64(tcg_helper_rem_i64, ret, arg1, arg2); 9068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 9078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 9085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_divu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 9098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 9105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_helper64(tcg_helper_divu_i64, ret, arg1, arg2); 9118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 9128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 9135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_remu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 9148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 9155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_helper64(tcg_helper_remu_i64, ret, arg1, arg2); 9168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 9178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 9188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 9198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 9205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_mov_i64(TCGv_i64 ret, TCGv_i64 arg) 9218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 9225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner if (!TCGV_EQUAL_I64(ret, arg)) 9235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i64(INDEX_op_mov_i64, ret, arg); 9248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 9258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 9265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_movi_i64(TCGv_i64 ret, int64_t arg) 9278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 9285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2i_i64(INDEX_op_movi_i64, ret, arg); 9298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 9308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 9315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld8u_i64(TCGv_i64 ret, TCGv_i64 arg2, 9328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_target_long offset) 9338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 9345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i64(INDEX_op_ld8u_i64, ret, arg2, offset); 9358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 9368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 9375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld8s_i64(TCGv_i64 ret, TCGv_i64 arg2, 9388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_target_long offset) 9398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 9405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i64(INDEX_op_ld8s_i64, ret, arg2, offset); 9418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 9428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 9435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld16u_i64(TCGv_i64 ret, TCGv_i64 arg2, 9448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_target_long offset) 9458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 9465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i64(INDEX_op_ld16u_i64, ret, arg2, offset); 9478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 9488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 9495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld16s_i64(TCGv_i64 ret, TCGv_i64 arg2, 9508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_target_long offset) 9518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 9525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i64(INDEX_op_ld16s_i64, ret, arg2, offset); 9538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 9548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 9555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld32u_i64(TCGv_i64 ret, TCGv_i64 arg2, 9568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_target_long offset) 9578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 9585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i64(INDEX_op_ld32u_i64, ret, arg2, offset); 9598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 9608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 9615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld32s_i64(TCGv_i64 ret, TCGv_i64 arg2, 9628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_target_long offset) 9638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 9645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i64(INDEX_op_ld32s_i64, ret, arg2, offset); 9658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 9668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 9675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ld_i64(TCGv_i64 ret, TCGv_i64 arg2, tcg_target_long offset) 9688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 9695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i64(INDEX_op_ld_i64, ret, arg2, offset); 9708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 9718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 9725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st8_i64(TCGv_i64 arg1, TCGv_i64 arg2, 9738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_target_long offset) 9748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 9755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i64(INDEX_op_st8_i64, arg1, arg2, offset); 9768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 9778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 9785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st16_i64(TCGv_i64 arg1, TCGv_i64 arg2, 9798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_target_long offset) 9808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 9815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i64(INDEX_op_st16_i64, arg1, arg2, offset); 9828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 9838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 9845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st32_i64(TCGv_i64 arg1, TCGv_i64 arg2, 9858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_target_long offset) 9868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 9875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i64(INDEX_op_st32_i64, arg1, arg2, offset); 9888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 9898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 9905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_st_i64(TCGv_i64 arg1, TCGv_i64 arg2, tcg_target_long offset) 9918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 9925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ldst_op_i64(INDEX_op_st_i64, arg1, arg2, offset); 9938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 9948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 9955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_add_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 9968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 9975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_add_i64, ret, arg1, arg2); 9988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 9998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 10005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sub_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 10018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 10025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_sub_i64, ret, arg1, arg2); 10038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 10048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 10055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_and_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 10068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 10075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner if (TCGV_EQUAL_I64(arg1, arg2)) { 10085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i64(ret, arg1); 10095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } else { 10105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_and_i64, ret, arg1, arg2); 10115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } 10128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 10138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 10145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_andi_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 10158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 10165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0 = tcg_const_i64(arg2); 10178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_and_i64(ret, arg1, t0); 10185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 10198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 10208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 10215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_or_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 10228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 10235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner if (TCGV_EQUAL_I64(arg1, arg2)) { 10245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i64(ret, arg1); 10255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } else { 10265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_or_i64, ret, arg1, arg2); 10275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } 10288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 10298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 10305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ori_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 10318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 10325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0 = tcg_const_i64(arg2); 10338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_or_i64(ret, arg1, t0); 10345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 10358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 10368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 10375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_xor_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 10388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 10395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner if (TCGV_EQUAL_I64(arg1, arg2)) { 10405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_movi_i64(ret, 0); 10415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } else { 10425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_xor_i64, ret, arg1, arg2); 10435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } 10448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 10458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 10465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_xori_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 10478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 10485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0 = tcg_const_i64(arg2); 10498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_xor_i64(ret, arg1, t0); 10505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 10518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 10528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 10535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shl_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 10548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 10555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_shl_i64, ret, arg1, arg2); 10568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 10578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 10585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shli_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 10598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 10608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (arg2 == 0) { 10618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_mov_i64(ret, arg1); 10628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } else { 10635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0 = tcg_const_i64(arg2); 10648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shl_i64(ret, arg1, t0); 10655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 10668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 10678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 10688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 10695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shr_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 10708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 10715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_shr_i64, ret, arg1, arg2); 10728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 10738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 10745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_shri_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 10758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 10768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (arg2 == 0) { 10778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_mov_i64(ret, arg1); 10788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } else { 10795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0 = tcg_const_i64(arg2); 10808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shr_i64(ret, arg1, t0); 10815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 10828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 10838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 10848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 10855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sar_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 10868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 10875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_sar_i64, ret, arg1, arg2); 10888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 10898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 10905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_sari_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 10918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 10928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (arg2 == 0) { 10938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_mov_i64(ret, arg1); 10948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } else { 10955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0 = tcg_const_i64(arg2); 10968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_sar_i64(ret, arg1, t0); 10975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 10988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 10998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 11008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 11015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_brcond_i64(int cond, TCGv_i64 arg1, TCGv_i64 arg2, 11028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int label_index) 11038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 11045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op4ii_i64(INDEX_op_brcond_i64, arg1, arg2, cond, label_index); 11058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 11068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1107b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turnerstatic inline void tcg_gen_setcond_i64(int cond, TCGv_i64 ret, 1108b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner TCGv_i64 arg1, TCGv_i64 arg2) 1109b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner{ 1110b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_op4i_i64(INDEX_op_setcond_i64, ret, arg1, arg2, cond); 1111b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner} 1112b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner 11135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_mul_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 11148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 11155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_mul_i64, ret, arg1, arg2); 11168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 11178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 11188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_div_i64 11195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_div_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 11208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 11215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_div_i64, ret, arg1, arg2); 11228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 11238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 11245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rem_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 11258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 11265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_rem_i64, ret, arg1, arg2); 11278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 11288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 11295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_divu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 11308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 11315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_divu_i64, ret, arg1, arg2); 11328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 11338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 11345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_remu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 11358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 11365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_remu_i64, ret, arg1, arg2); 11378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 11388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 11395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_div_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 11408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 11415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0; 11425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i64(); 11438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_sari_i64(t0, arg1, 63); 11445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op5_i64(INDEX_op_div2_i64, ret, t0, arg1, t0, arg2); 11455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 11468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 11478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 11485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rem_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 11498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 11505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0; 11515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i64(); 11528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_sari_i64(t0, arg1, 63); 11535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op5_i64(INDEX_op_div2_i64, t0, ret, arg1, t0, arg2); 11545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 11558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 11568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 11575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_divu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 11588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 11595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0; 11605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i64(); 11618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i64(t0, 0); 11625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op5_i64(INDEX_op_divu2_i64, ret, t0, arg1, t0, arg2); 11635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 11648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 11658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 11665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_remu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 11678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 11685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0; 11695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i64(); 11708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i64(t0, 0); 11715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op5_i64(INDEX_op_divu2_i64, t0, ret, arg1, t0, arg2); 11725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 11738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 11748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 11758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 11768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 11778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 11785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_addi_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 11795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 11805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner /* some cases can be optimized here */ 11815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner if (arg2 == 0) { 11825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i64(ret, arg1); 11835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } else { 11845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0 = tcg_const_i64(arg2); 11855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_add_i64(ret, arg1, t0); 11865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 11875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } 11885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 11895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 11905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_subfi_i64(TCGv_i64 ret, int64_t arg1, TCGv_i64 arg2) 11915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 11925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0 = tcg_const_i64(arg1); 11935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_sub_i64(ret, t0, arg2); 11945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 11955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 11965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 11975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_subi_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 11985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 11995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner /* some cases can be optimized here */ 12005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner if (arg2 == 0) { 12015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i64(ret, arg1); 12025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } else { 12035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0 = tcg_const_i64(arg2); 12045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_sub_i64(ret, arg1, t0); 12055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 12065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } 12075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 12085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_brcondi_i64(int cond, TCGv_i64 arg1, int64_t arg2, 12098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int label_index) 12108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 12115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0 = tcg_const_i64(arg2); 12128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_brcond_i64(cond, arg1, t0, label_index); 12135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 12148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 12158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1216b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turnerstatic inline void tcg_gen_setcondi_i64(int cond, TCGv_i64 ret, TCGv_i64 arg1, 1217b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner int64_t arg2) 1218b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner{ 1219b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner TCGv_i64 t0 = tcg_const_i64(arg2); 1220b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_setcond_i64(cond, ret, arg1, t0); 1221b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_temp_free_i64(t0); 1222b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner} 1223b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner 12245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_muli_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 12255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 12265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0 = tcg_const_i64(arg2); 12275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mul_i64(ret, arg1, t0); 12285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 12295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 12305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 12315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 12328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/***************************************/ 12338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* optional operations */ 12348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 12355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext8s_i32(TCGv_i32 ret, TCGv_i32 arg) 12368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 12378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_ext8s_i32 12385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i32(INDEX_op_ext8s_i32, ret, arg); 12398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 12408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shli_i32(ret, arg, 24); 12418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_sari_i32(ret, ret, 24); 12428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 12438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 12448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 12455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext16s_i32(TCGv_i32 ret, TCGv_i32 arg) 12468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 12478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_ext16s_i32 12485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i32(INDEX_op_ext16s_i32, ret, arg); 12498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 12508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shli_i32(ret, arg, 16); 12518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_sari_i32(ret, ret, 16); 12528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 12538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 12548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 12555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext8u_i32(TCGv_i32 ret, TCGv_i32 arg) 12568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1257b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_ext8u_i32 1258b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_op2_i32(INDEX_op_ext8u_i32, ret, arg); 1259b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else 12608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_andi_i32(ret, arg, 0xffu); 1261b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif 12628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 12638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 12645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext16u_i32(TCGv_i32 ret, TCGv_i32 arg) 12658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1266b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_ext16u_i32 1267b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_op2_i32(INDEX_op_ext16u_i32, ret, arg); 1268b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else 12698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_andi_i32(ret, arg, 0xffffu); 1270b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif 12718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 12728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 12738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Note: we assume the two high bytes are set to zero */ 12745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap16_i32(TCGv_i32 ret, TCGv_i32 arg) 12758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 12768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_bswap16_i32 12775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i32(INDEX_op_bswap16_i32, ret, arg); 12788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 12795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0 = tcg_temp_new_i32(); 12808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 12815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ext8u_i32(t0, arg); 12825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shli_i32(t0, t0, 8); 12835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shri_i32(ret, arg, 8); 12845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i32(ret, ret, t0); 12855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 12868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 12878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 12888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 12895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap32_i32(TCGv_i32 ret, TCGv_i32 arg) 12908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 12915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_bswap32_i32 12925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i32(INDEX_op_bswap32_i32, ret, arg); 12938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 12945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0, t1; 12955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i32(); 12965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t1 = tcg_temp_new_i32(); 12978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 12988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shli_i32(t0, arg, 24); 12998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 13008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_andi_i32(t1, arg, 0x0000ff00); 13018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shli_i32(t1, t1, 8); 13028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_or_i32(t0, t0, t1); 13038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 13048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shri_i32(t1, arg, 8); 13058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_andi_i32(t1, t1, 0x0000ff00); 13068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_or_i32(t0, t0, t1); 13078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 13088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shri_i32(t1, arg, 24); 13098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_or_i32(ret, t0, t1); 13105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 13115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t1); 13128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 13138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 13148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 13158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TCG_TARGET_REG_BITS == 32 13165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext8s_i64(TCGv_i64 ret, TCGv_i64 arg) 13178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 13185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ext8s_i32(TCGV_LOW(ret), TCGV_LOW(arg)); 13195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31); 13208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 13218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 13225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext16s_i64(TCGv_i64 ret, TCGv_i64 arg) 13238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 13245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ext16s_i32(TCGV_LOW(ret), TCGV_LOW(arg)); 13255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31); 13268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 13278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 13285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext32s_i64(TCGv_i64 ret, TCGv_i64 arg) 13298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 13305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(TCGV_LOW(ret), TCGV_LOW(arg)); 13315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31); 13328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 13338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 13345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext8u_i64(TCGv_i64 ret, TCGv_i64 arg) 13358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 13365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ext8u_i32(TCGV_LOW(ret), TCGV_LOW(arg)); 13378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i32(TCGV_HIGH(ret), 0); 13388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 13398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 13405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext16u_i64(TCGv_i64 ret, TCGv_i64 arg) 13418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 13425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ext16u_i32(TCGV_LOW(ret), TCGV_LOW(arg)); 13438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i32(TCGV_HIGH(ret), 0); 13448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 13458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 13465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext32u_i64(TCGv_i64 ret, TCGv_i64 arg) 13478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 13485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(TCGV_LOW(ret), TCGV_LOW(arg)); 13498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i32(TCGV_HIGH(ret), 0); 13508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 13518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 13525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_trunc_i64_i32(TCGv_i32 ret, TCGv_i64 arg) 13538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 13545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(ret, TCGV_LOW(arg)); 13558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 13568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 13575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_extu_i32_i64(TCGv_i64 ret, TCGv_i32 arg) 13588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 13595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(TCGV_LOW(ret), arg); 13608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i32(TCGV_HIGH(ret), 0); 13618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 13628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 13635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext_i32_i64(TCGv_i64 ret, TCGv_i32 arg) 13645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 13655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(TCGV_LOW(ret), arg); 13665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31); 13675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 13685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 13695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Note: we assume the six high bytes are set to zero */ 13705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap16_i64(TCGv_i64 ret, TCGv_i64 arg) 13715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 13725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(TCGV_HIGH(ret), TCGV_HIGH(arg)); 13735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_bswap16_i32(TCGV_LOW(ret), TCGV_LOW(arg)); 13745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 13755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 13765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Note: we assume the four high bytes are set to zero */ 13775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap32_i64(TCGv_i64 ret, TCGv_i64 arg) 13788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 13795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(TCGV_HIGH(ret), TCGV_HIGH(arg)); 13805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_bswap32_i32(TCGV_LOW(ret), TCGV_LOW(arg)); 13818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 13828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 13835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap64_i64(TCGv_i64 ret, TCGv_i64 arg) 13848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 13855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0, t1; 13865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i32(); 13875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t1 = tcg_temp_new_i32(); 13888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 13895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_bswap32_i32(t0, TCGV_LOW(arg)); 13905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_bswap32_i32(t1, TCGV_HIGH(arg)); 13915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(TCGV_LOW(ret), t1); 13928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_mov_i32(TCGV_HIGH(ret), t0); 13935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 13945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t1); 13958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 13968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 13978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 13985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext8s_i64(TCGv_i64 ret, TCGv_i64 arg) 13998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 14008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_ext8s_i64 14015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i64(INDEX_op_ext8s_i64, ret, arg); 14028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 14038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shli_i64(ret, arg, 56); 14048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_sari_i64(ret, ret, 56); 14058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 14068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 14078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 14085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext16s_i64(TCGv_i64 ret, TCGv_i64 arg) 14098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 14108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_ext16s_i64 14115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i64(INDEX_op_ext16s_i64, ret, arg); 14128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 14138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shli_i64(ret, arg, 48); 14148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_sari_i64(ret, ret, 48); 14158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 14168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 14178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 14185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext32s_i64(TCGv_i64 ret, TCGv_i64 arg) 14198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 14208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_ext32s_i64 14215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i64(INDEX_op_ext32s_i64, ret, arg); 14228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 14238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shli_i64(ret, arg, 32); 14248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_sari_i64(ret, ret, 32); 14258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 14268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 14278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 14285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext8u_i64(TCGv_i64 ret, TCGv_i64 arg) 14298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1430b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_ext8u_i64 1431b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_op2_i64(INDEX_op_ext8u_i64, ret, arg); 1432b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else 14338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_andi_i64(ret, arg, 0xffu); 1434b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif 14358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 14368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 14375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext16u_i64(TCGv_i64 ret, TCGv_i64 arg) 14388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1439b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_ext16u_i64 1440b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_op2_i64(INDEX_op_ext16u_i64, ret, arg); 1441b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else 14428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_andi_i64(ret, arg, 0xffffu); 1443b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif 14448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 14458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 14465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext32u_i64(TCGv_i64 ret, TCGv_i64 arg) 14478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1448b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_ext32u_i64 1449b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_op2_i64(INDEX_op_ext32u_i64, ret, arg); 1450b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else 14518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_andi_i64(ret, arg, 0xffffffffu); 1452b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif 14538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 14548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 14558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Note: we assume the target supports move between 32 and 64 bit 14568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project registers. This will probably break MIPS64 targets. */ 14575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_trunc_i64_i32(TCGv_i32 ret, TCGv_i64 arg) 14588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 14595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(ret, MAKE_TCGV_I32(GET_TCGV_I64(arg))); 14608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 14618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 14628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Note: we assume the target supports move between 32 and 64 bit 14638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project registers */ 14645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_extu_i32_i64(TCGv_i64 ret, TCGv_i32 arg) 14658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1466b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_ext32u_i64(ret, MAKE_TCGV_I64(GET_TCGV_I32(arg))); 14678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 14688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 14698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Note: we assume the target supports move between 32 and 64 bit 14708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project registers */ 14715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_ext_i32_i64(TCGv_i64 ret, TCGv_i32 arg) 14728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 14735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ext32s_i64(ret, MAKE_TCGV_I64(GET_TCGV_I32(arg))); 14745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 14755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 14765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Note: we assume the six high bytes are set to zero */ 14775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap16_i64(TCGv_i64 ret, TCGv_i64 arg) 14785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 14795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_bswap16_i64 14805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i64(INDEX_op_bswap16_i64, ret, arg); 14815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else 14825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0 = tcg_temp_new_i64(); 14835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 14845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ext8u_i64(t0, arg); 14855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shli_i64(t0, t0, 8); 14865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shri_i64(ret, arg, 8); 14875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i64(ret, ret, t0); 14885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 14895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif 14908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 14918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 14925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Note: we assume the four high bytes are set to zero */ 14935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap32_i64(TCGv_i64 ret, TCGv_i64 arg) 14948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 14955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_bswap32_i64 14965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i64(INDEX_op_bswap32_i64, ret, arg); 14978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 14985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0, t1; 14995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i64(); 15005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t1 = tcg_temp_new_i64(); 15015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 15025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shli_i64(t0, arg, 24); 15035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ext32u_i64(t0, t0); 15045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 15055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_andi_i64(t1, arg, 0x0000ff00); 15065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shli_i64(t1, t1, 8); 15075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i64(t0, t0, t1); 15085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 15095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shri_i64(t1, arg, 8); 15105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_andi_i64(t1, t1, 0x0000ff00); 15115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i64(t0, t0, t1); 15125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 15135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shri_i64(t1, arg, 24); 15145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i64(ret, t0, t1); 15155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 15165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t1); 15175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif 15185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 15195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 15205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_bswap64_i64(TCGv_i64 ret, TCGv_i64 arg) 15215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 15225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_bswap64_i64 15235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i64(INDEX_op_bswap64_i64, ret, arg); 15245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else 1525ddf49e53df97a349f42c733059165dc73c9907dcDavid 'Digit' Turner TCGv_i64 t0 = tcg_temp_new_i64(); 1526ddf49e53df97a349f42c733059165dc73c9907dcDavid 'Digit' Turner TCGv_i64 t1 = tcg_temp_new_i64(); 15278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 15288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shli_i64(t0, arg, 56); 15298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 15308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_andi_i64(t1, arg, 0x0000ff00); 15318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shli_i64(t1, t1, 40); 15328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_or_i64(t0, t0, t1); 15338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 15348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_andi_i64(t1, arg, 0x00ff0000); 15358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shli_i64(t1, t1, 24); 15368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_or_i64(t0, t0, t1); 15378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 15388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_andi_i64(t1, arg, 0xff000000); 15398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shli_i64(t1, t1, 8); 15408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_or_i64(t0, t0, t1); 15418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 15428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shri_i64(t1, arg, 8); 15438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_andi_i64(t1, t1, 0xff000000); 15448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_or_i64(t0, t0, t1); 15458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 15468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shri_i64(t1, arg, 24); 15478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_andi_i64(t1, t1, 0x00ff0000); 15488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_or_i64(t0, t0, t1); 15498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 15508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shri_i64(t1, arg, 40); 15518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_andi_i64(t1, t1, 0x0000ff00); 15528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_or_i64(t0, t0, t1); 15538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 15548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_shri_i64(t1, arg, 56); 15558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_or_i64(ret, t0, t1); 1556ddf49e53df97a349f42c733059165dc73c9907dcDavid 'Digit' Turner tcg_temp_free_i64(t0); 1557ddf49e53df97a349f42c733059165dc73c9907dcDavid 'Digit' Turner tcg_temp_free_i64(t1); 15588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 15598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 15608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 15618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 15628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 15635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_neg_i32(TCGv_i32 ret, TCGv_i32 arg) 15648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 15658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_neg_i32 15665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i32(INDEX_op_neg_i32, ret, arg); 15678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 15685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0 = tcg_const_i32(0); 15698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_sub_i32(ret, t0, arg); 15705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 15718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 15728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 15738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 15745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_neg_i64(TCGv_i64 ret, TCGv_i64 arg) 15758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 15768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef TCG_TARGET_HAS_neg_i64 15775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i64(INDEX_op_neg_i64, ret, arg); 15788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 15795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0 = tcg_const_i64(0); 15808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_sub_i64(ret, t0, arg); 15815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 15828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 15838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 15848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 15855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_not_i32(TCGv_i32 ret, TCGv_i32 arg) 15868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 15875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_not_i32 15885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i32(INDEX_op_not_i32, ret, arg); 15895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else 15908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_xori_i32(ret, arg, -1); 15915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif 15928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 15938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 15945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_not_i64(TCGv_i64 ret, TCGv_i64 arg) 15958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 15965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_not_i64 15975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op2_i64(INDEX_op_not_i64, ret, arg); 15985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else 15998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_xori_i64(ret, arg, -1); 16005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif 16018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 16028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 16035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_discard_i32(TCGv_i32 arg) 16048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 16055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op1_i32(INDEX_op_discard, arg); 16068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 16078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 16088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TCG_TARGET_REG_BITS == 32 16095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_discard_i64(TCGv_i64 arg) 16108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 16115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_discard_i32(TCGV_LOW(arg)); 16128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_discard_i32(TCGV_HIGH(arg)); 16138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 16148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 16155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_discard_i64(TCGv_i64 arg) 16165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 16175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op1_i64(INDEX_op_discard, arg); 16185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 16195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif 16205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_concat_i32_i64(TCGv_i64 dest, TCGv_i32 low, TCGv_i32 high) 16225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 16235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#if TCG_TARGET_REG_BITS == 32 16245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(TCGV_LOW(dest), low); 16255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(TCGV_HIGH(dest), high); 16265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else 16275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 tmp = tcg_temp_new_i64(); 16285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner /* This extension is only needed for type correctness. 16295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner We may be able to do better given target specific information. */ 16305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_extu_i32_i64(tmp, high); 16315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shli_i64(tmp, tmp, 32); 16325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_extu_i32_i64(dest, low); 16335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i64(dest, dest, tmp); 16345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(tmp); 16355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif 16365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 16375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_concat32_i64(TCGv_i64 dest, TCGv_i64 low, TCGv_i64 high) 16395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 16405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#if TCG_TARGET_REG_BITS == 32 16415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_concat_i32_i64(dest, TCGV_LOW(low), TCGV_LOW(high)); 16425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else 16435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 tmp = tcg_temp_new_i64(); 16445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_ext32u_i64(dest, low); 16455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shli_i64(tmp, high, 32); 16465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i64(dest, dest, tmp); 16475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(tmp); 16485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif 16495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 16505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_andc_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 16525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1653b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_andc_i32 1654b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_andc_i32, ret, arg1, arg2); 1655b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else 16565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0; 16575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i32(); 16585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_not_i32(t0, arg2); 16595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_and_i32(ret, arg1, t0); 16605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 1661b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif 16625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 16635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_andc_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 16655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1666b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_andc_i64 1667b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_andc_i64, ret, arg1, arg2); 1668b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#elif defined(TCG_TARGET_HAS_andc_i32) && TCG_TARGET_REG_BITS == 32 1669b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_andc_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2)); 1670b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_andc_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2)); 1671b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else 16725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0; 16735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i64(); 16745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_not_i64(t0, arg2); 16755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_and_i64(ret, arg1, t0); 16765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 1677b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif 16785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 16795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_eqv_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 16815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 16825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_xor_i32(ret, arg1, arg2); 16835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_not_i32(ret, ret); 16845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 16855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_eqv_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 16875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 16885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_xor_i64(ret, arg1, arg2); 16895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_not_i64(ret, ret); 16905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 16915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_nand_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 16935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 16945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_and_i32(ret, arg1, arg2); 16955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_not_i32(ret, ret); 16965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 16975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_nand_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 16995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 17005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_and_i64(ret, arg1, arg2); 17015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_not_i64(ret, ret); 17025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 17035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 17045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_nor_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 17055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 17065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i32(ret, arg1, arg2); 17075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_not_i32(ret, ret); 17085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 17095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 17105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_nor_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 17115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 17125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i64(ret, arg1, arg2); 17135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_not_i64(ret, ret); 17145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 17155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 17165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_orc_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 17175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1718b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_orc_i32 1719b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_orc_i32, ret, arg1, arg2); 1720b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else 17215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0; 17225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i32(); 17235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_not_i32(t0, arg2); 17245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i32(ret, arg1, t0); 17255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 1726b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif 17275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 17285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 17295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_orc_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 17305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 1731b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#ifdef TCG_TARGET_HAS_orc_i64 1732b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_orc_i64, ret, arg1, arg2); 1733b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#elif defined(TCG_TARGET_HAS_orc_i32) && TCG_TARGET_REG_BITS == 32 1734b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_orc_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2)); 1735b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner tcg_gen_orc_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2)); 1736b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#else 17375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0; 17385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i64(); 17395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_not_i64(t0, arg2); 17405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i64(ret, arg1, t0); 17415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 1742b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#endif 17435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 17445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 17455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotl_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 17465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 17475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_rot_i32 17485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_rotl_i32, ret, arg1, arg2); 17495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else 17505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0, t1; 17515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 17525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i32(); 17535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t1 = tcg_temp_new_i32(); 17545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shl_i32(t0, arg1, arg2); 17555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_subfi_i32(t1, 32, arg2); 17565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shr_i32(t1, arg1, t1); 17575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i32(ret, t0, t1); 17585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 17595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t1); 17605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif 17615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 17625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 17635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotl_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 17648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 17655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_rot_i64 17665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_rotl_i64, ret, arg1, arg2); 17675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else 17685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0, t1; 17695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 17705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i64(); 17715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t1 = tcg_temp_new_i64(); 17725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shl_i64(t0, arg1, arg2); 17735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_subfi_i64(t1, 64, arg2); 17745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shr_i64(t1, arg1, t1); 17755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i64(ret, t0, t1); 17765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 17775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t1); 17785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif 17798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 17805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 17815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotli_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2) 17825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 17835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner /* some cases can be optimized here */ 17845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner if (arg2 == 0) { 17855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(ret, arg1); 17865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } else { 17875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_rot_i32 17885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0 = tcg_const_i32(arg2); 17895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_rotl_i32(ret, arg1, t0); 17905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 17915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else 17925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0, t1; 17935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i32(); 17945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t1 = tcg_temp_new_i32(); 17955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shli_i32(t0, arg1, arg2); 17965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shri_i32(t1, arg1, 32 - arg2); 17975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i32(ret, t0, t1); 17985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 17995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t1); 18008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 18015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } 18025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 18035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 18045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotli_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 18055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 18065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner /* some cases can be optimized here */ 18075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner if (arg2 == 0) { 18085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i64(ret, arg1); 18095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } else { 18105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_rot_i64 18115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0 = tcg_const_i64(arg2); 18125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_rotl_i64(ret, arg1, t0); 18135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 18145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else 18155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0, t1; 18165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i64(); 18175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t1 = tcg_temp_new_i64(); 18185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shli_i64(t0, arg1, arg2); 18195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shri_i64(t1, arg1, 64 - arg2); 18205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i64(ret, t0, t1); 18215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 18225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t1); 18235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif 18245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } 18255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 18265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 18275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotr_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) 18285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 18295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_rot_i32 18305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i32(INDEX_op_rotr_i32, ret, arg1, arg2); 18315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else 18325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i32 t0, t1; 18335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 18345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i32(); 18355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t1 = tcg_temp_new_i32(); 18365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shr_i32(t0, arg1, arg2); 18375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_subfi_i32(t1, 32, arg2); 18385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shl_i32(t1, arg1, t1); 18395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i32(ret, t0, t1); 18405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t0); 18415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i32(t1); 18425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif 18435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 18445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 18455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotr_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2) 18465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 18475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef TCG_TARGET_HAS_rot_i64 18485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3_i64(INDEX_op_rotr_i64, ret, arg1, arg2); 18495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else 18505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGv_i64 t0, t1; 18515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 18525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t0 = tcg_temp_new_i64(); 18535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner t1 = tcg_temp_new_i64(); 1854ddf49e53df97a349f42c733059165dc73c9907dcDavid 'Digit' Turner tcg_gen_shr_i64(t0, arg1, arg2); 18555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_subfi_i64(t1, 64, arg2); 18565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_shl_i64(t1, arg1, t1); 18575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_or_i64(ret, t0, t1); 18585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t0); 18595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_temp_free_i64(t1); 18605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif 18615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 18625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 18635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotri_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2) 18645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 18655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner /* some cases can be optimized here */ 18665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner if (arg2 == 0) { 18675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i32(ret, arg1); 18685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } else { 18695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_rotli_i32(ret, arg1, 32 - arg2); 18705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } 18715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 18725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 18735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_rotri_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) 18745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 18755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner /* some cases can be optimized here */ 18765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner if (arg2 == 0) { 18775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_mov_i64(ret, arg1); 18785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } else { 18795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_rotli_i64(ret, arg1, 64 - arg2); 18805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } 18815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 18828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 18838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/***************************************/ 18848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* QEMU specific operations. Their type depend on the QEMU CPU 18858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project type. */ 18868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef TARGET_LONG_BITS 18878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#error must include QEMU headers 18888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 18898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 18905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#if TARGET_LONG_BITS == 32 18915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCGv TCGv_i32 18925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_temp_new() tcg_temp_new_i32() 18935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_global_reg_new tcg_global_reg_new_i32 18945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_global_mem_new tcg_global_mem_new_i32 18955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_temp_local_new() tcg_temp_local_new_i32() 18965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_temp_free tcg_temp_free_i32 18975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_qemu_ldst_op tcg_gen_op3i_i32 18985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_qemu_ldst_op_i64 tcg_gen_qemu_ldst_op_i64_i32 18995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCGV_UNUSED(x) TCGV_UNUSED_I32(x) 19005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCGV_EQUAL(a, b) TCGV_EQUAL_I32(a, b) 19015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else 19025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCGv TCGv_i64 19035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_temp_new() tcg_temp_new_i64() 19045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_global_reg_new tcg_global_reg_new_i64 19055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_global_mem_new tcg_global_mem_new_i64 19065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_temp_local_new() tcg_temp_local_new_i64() 19075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_temp_free tcg_temp_free_i64 19085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_qemu_ldst_op tcg_gen_op3i_i64 19095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_qemu_ldst_op_i64 tcg_gen_qemu_ldst_op_i64_i64 19105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCGV_UNUSED(x) TCGV_UNUSED_I64(x) 19115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCGV_EQUAL(a, b) TCGV_EQUAL_I64(a, b) 19125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif 19135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 19148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* debug info: write the PC of the corresponding QEMU CPU instruction */ 19158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_debug_insn_start(uint64_t pc) 19168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 19178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project /* XXX: must really use a 32 bit size for TCGArg in all cases */ 19188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS > TCG_TARGET_REG_BITS 19198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_op2ii(INDEX_op_debug_insn_start, 19208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project (uint32_t)(pc), (uint32_t)(pc >> 32)); 19218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 19228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_op1i(INDEX_op_debug_insn_start, pc); 19238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 19248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 19258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 19268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_exit_tb(tcg_target_long val) 19278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 19288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_op1i(INDEX_op_exit_tb, val); 19298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 19308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 19318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_goto_tb(int idx) 19328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 19338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_op1i(INDEX_op_goto_tb, idx); 19348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 19358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 19368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TCG_TARGET_REG_BITS == 32 19378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld8u(TCGv ret, TCGv addr, int mem_index) 19388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 19398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32 19405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3i_i32(INDEX_op_qemu_ld8u, ret, addr, mem_index); 19418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 19425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op4i_i32(INDEX_op_qemu_ld8u, TCGV_LOW(ret), TCGV_LOW(addr), 19435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_HIGH(addr), mem_index); 19448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i32(TCGV_HIGH(ret), 0); 19458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 19468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 19478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 19488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld8s(TCGv ret, TCGv addr, int mem_index) 19498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 19508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32 19515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3i_i32(INDEX_op_qemu_ld8s, ret, addr, mem_index); 19528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 19535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op4i_i32(INDEX_op_qemu_ld8s, TCGV_LOW(ret), TCGV_LOW(addr), 19545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_HIGH(addr), mem_index); 19555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31); 19568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 19578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 19588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 19598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld16u(TCGv ret, TCGv addr, int mem_index) 19608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 19618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32 19625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3i_i32(INDEX_op_qemu_ld16u, ret, addr, mem_index); 19638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 19645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op4i_i32(INDEX_op_qemu_ld16u, TCGV_LOW(ret), TCGV_LOW(addr), 19655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_HIGH(addr), mem_index); 19668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i32(TCGV_HIGH(ret), 0); 19678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 19688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 19698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 19708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld16s(TCGv ret, TCGv addr, int mem_index) 19718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 19728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32 19735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3i_i32(INDEX_op_qemu_ld16s, ret, addr, mem_index); 19748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 19755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op4i_i32(INDEX_op_qemu_ld16s, TCGV_LOW(ret), TCGV_LOW(addr), 19765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_HIGH(addr), mem_index); 19775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31); 19788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 19798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 19808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 19818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld32u(TCGv ret, TCGv addr, int mem_index) 19828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 19838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32 19845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3i_i32(INDEX_op_qemu_ld32u, ret, addr, mem_index); 19858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 19865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op4i_i32(INDEX_op_qemu_ld32u, TCGV_LOW(ret), TCGV_LOW(addr), 19875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_HIGH(addr), mem_index); 19888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project tcg_gen_movi_i32(TCGV_HIGH(ret), 0); 19898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 19908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 19918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 19928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld32s(TCGv ret, TCGv addr, int mem_index) 19938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 19948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32 19955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3i_i32(INDEX_op_qemu_ld32u, ret, addr, mem_index); 19968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 19975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op4i_i32(INDEX_op_qemu_ld32u, TCGV_LOW(ret), TCGV_LOW(addr), 19985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_HIGH(addr), mem_index); 19995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31); 20008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 20018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 20028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 20035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_qemu_ld64(TCGv_i64 ret, TCGv addr, int mem_index) 20048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 20058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32 20065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op4i_i32(INDEX_op_qemu_ld64, TCGV_LOW(ret), TCGV_HIGH(ret), addr, mem_index); 20078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 20085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op5i_i32(INDEX_op_qemu_ld64, TCGV_LOW(ret), TCGV_HIGH(ret), 20095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_LOW(addr), TCGV_HIGH(addr), mem_index); 20108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 20118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 20128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 20138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st8(TCGv arg, TCGv addr, int mem_index) 20148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 20158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32 20165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3i_i32(INDEX_op_qemu_st8, arg, addr, mem_index); 20178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 20185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op4i_i32(INDEX_op_qemu_st8, TCGV_LOW(arg), TCGV_LOW(addr), 20195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_HIGH(addr), mem_index); 20208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 20218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 20228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 20238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st16(TCGv arg, TCGv addr, int mem_index) 20248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 20258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32 20265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3i_i32(INDEX_op_qemu_st16, arg, addr, mem_index); 20278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 20285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op4i_i32(INDEX_op_qemu_st16, TCGV_LOW(arg), TCGV_LOW(addr), 20295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_HIGH(addr), mem_index); 20308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 20318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 20328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 20338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st32(TCGv arg, TCGv addr, int mem_index) 20348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 20358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32 20365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op3i_i32(INDEX_op_qemu_st32, arg, addr, mem_index); 20378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 20385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op4i_i32(INDEX_op_qemu_st32, TCGV_LOW(arg), TCGV_LOW(addr), 20395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_HIGH(addr), mem_index); 20408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 20418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 20428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 20435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_qemu_st64(TCGv_i64 arg, TCGv addr, int mem_index) 20448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 20458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 32 20465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op4i_i32(INDEX_op_qemu_st64, TCGV_LOW(arg), TCGV_HIGH(arg), addr, 20475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner mem_index); 20488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 20495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_op5i_i32(INDEX_op_qemu_st64, TCGV_LOW(arg), TCGV_HIGH(arg), 20505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCGV_LOW(addr), TCGV_HIGH(addr), mem_index); 20518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 20528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 20538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 20548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld_ptr tcg_gen_ld_i32 20558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_discard_ptr tcg_gen_discard_i32 20568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 20578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else /* TCG_TARGET_REG_BITS == 32 */ 20588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 20598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld8u(TCGv ret, TCGv addr, int mem_index) 20608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 20615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld8u, ret, addr, mem_index); 20628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 20638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 20648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld8s(TCGv ret, TCGv addr, int mem_index) 20658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 20665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld8s, ret, addr, mem_index); 20678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 20688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 20698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld16u(TCGv ret, TCGv addr, int mem_index) 20708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 20715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld16u, ret, addr, mem_index); 20728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 20738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 20748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld16s(TCGv ret, TCGv addr, int mem_index) 20758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 20765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld16s, ret, addr, mem_index); 20778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 20788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 20798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld32u(TCGv ret, TCGv addr, int mem_index) 20808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 20815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld32u, ret, addr, mem_index); 20828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 20838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 20848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_ld32s(TCGv ret, TCGv addr, int mem_index) 20858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 20865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld32s, ret, addr, mem_index); 20878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 20888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 20895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_qemu_ld64(TCGv_i64 ret, TCGv addr, int mem_index) 20908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 20915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_qemu_ldst_op_i64(INDEX_op_qemu_ld64, ret, addr, mem_index); 20928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 20938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 20948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st8(TCGv arg, TCGv addr, int mem_index) 20958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 20965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_qemu_ldst_op(INDEX_op_qemu_st8, arg, addr, mem_index); 20978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 20988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 20998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st16(TCGv arg, TCGv addr, int mem_index) 21008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 21015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_qemu_ldst_op(INDEX_op_qemu_st16, arg, addr, mem_index); 21028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 21038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 21048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void tcg_gen_qemu_st32(TCGv arg, TCGv addr, int mem_index) 21058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 21065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_qemu_ldst_op(INDEX_op_qemu_st32, arg, addr, mem_index); 21078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 21088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 21095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void tcg_gen_qemu_st64(TCGv_i64 arg, TCGv addr, int mem_index) 21108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 21115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner tcg_gen_qemu_ldst_op_i64(INDEX_op_qemu_st64, arg, addr, mem_index); 21128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 21138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 21148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld_ptr tcg_gen_ld_i64 21158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_discard_ptr tcg_gen_discard_i64 21168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 21178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif /* TCG_TARGET_REG_BITS != 32 */ 21188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 21198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_BITS == 64 21208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define TCG_TYPE_TL TCG_TYPE_I64 21218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_movi_tl tcg_gen_movi_i64 21228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_mov_tl tcg_gen_mov_i64 21238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld8u_tl tcg_gen_ld8u_i64 21248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld8s_tl tcg_gen_ld8s_i64 21258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld16u_tl tcg_gen_ld16u_i64 21268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld16s_tl tcg_gen_ld16s_i64 21278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld32u_tl tcg_gen_ld32u_i64 21288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld32s_tl tcg_gen_ld32s_i64 21298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld_tl tcg_gen_ld_i64 21308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st8_tl tcg_gen_st8_i64 21318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st16_tl tcg_gen_st16_i64 21328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st32_tl tcg_gen_st32_i64 21338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st_tl tcg_gen_st_i64 21348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_add_tl tcg_gen_add_i64 21358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_addi_tl tcg_gen_addi_i64 21368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sub_tl tcg_gen_sub_i64 21378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_neg_tl tcg_gen_neg_i64 21385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_subfi_tl tcg_gen_subfi_i64 21398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_subi_tl tcg_gen_subi_i64 21408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_and_tl tcg_gen_and_i64 21418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_andi_tl tcg_gen_andi_i64 21428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_or_tl tcg_gen_or_i64 21438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ori_tl tcg_gen_ori_i64 21448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_xor_tl tcg_gen_xor_i64 21458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_xori_tl tcg_gen_xori_i64 21468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_not_tl tcg_gen_not_i64 21478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shl_tl tcg_gen_shl_i64 21488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shli_tl tcg_gen_shli_i64 21498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shr_tl tcg_gen_shr_i64 21508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shri_tl tcg_gen_shri_i64 21518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sar_tl tcg_gen_sar_i64 21528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sari_tl tcg_gen_sari_i64 21538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_brcond_tl tcg_gen_brcond_i64 21548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_brcondi_tl tcg_gen_brcondi_i64 2155b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#define tcg_gen_setcond_tl tcg_gen_setcond_i64 2156b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#define tcg_gen_setcondi_tl tcg_gen_setcondi_i64 21578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_mul_tl tcg_gen_mul_i64 21588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_muli_tl tcg_gen_muli_i64 21595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_div_tl tcg_gen_div_i64 21605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rem_tl tcg_gen_rem_i64 21615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_divu_tl tcg_gen_divu_i64 21625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_remu_tl tcg_gen_remu_i64 21638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_discard_tl tcg_gen_discard_i64 21648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_trunc_tl_i32 tcg_gen_trunc_i64_i32 21658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_trunc_i64_tl tcg_gen_mov_i64 21668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_extu_i32_tl tcg_gen_extu_i32_i64 21678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_i32_tl tcg_gen_ext_i32_i64 21688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_extu_tl_i64 tcg_gen_mov_i64 21698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_tl_i64 tcg_gen_mov_i64 21708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext8u_tl tcg_gen_ext8u_i64 21718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext8s_tl tcg_gen_ext8s_i64 21728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext16u_tl tcg_gen_ext16u_i64 21738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext16s_tl tcg_gen_ext16s_i64 21748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext32u_tl tcg_gen_ext32u_i64 21758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext32s_tl tcg_gen_ext32s_i64 21765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_bswap16_tl tcg_gen_bswap16_i64 21775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_bswap32_tl tcg_gen_bswap32_i64 21785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_bswap64_tl tcg_gen_bswap64_i64 21795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_concat_tl_i64 tcg_gen_concat32_i64 21805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_andc_tl tcg_gen_andc_i64 21815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_eqv_tl tcg_gen_eqv_i64 21825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_nand_tl tcg_gen_nand_i64 21835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_nor_tl tcg_gen_nor_i64 21845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_orc_tl tcg_gen_orc_i64 21855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotl_tl tcg_gen_rotl_i64 21865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotli_tl tcg_gen_rotli_i64 21875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotr_tl tcg_gen_rotr_i64 21885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotri_tl tcg_gen_rotri_i64 21898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_const_tl tcg_const_i64 21905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_const_local_tl tcg_const_local_i64 21918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 21928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define TCG_TYPE_TL TCG_TYPE_I32 21938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_movi_tl tcg_gen_movi_i32 21948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_mov_tl tcg_gen_mov_i32 21958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld8u_tl tcg_gen_ld8u_i32 21968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld8s_tl tcg_gen_ld8s_i32 21978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld16u_tl tcg_gen_ld16u_i32 21988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld16s_tl tcg_gen_ld16s_i32 21998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld32u_tl tcg_gen_ld_i32 22008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld32s_tl tcg_gen_ld_i32 22018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ld_tl tcg_gen_ld_i32 22028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st8_tl tcg_gen_st8_i32 22038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st16_tl tcg_gen_st16_i32 22048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st32_tl tcg_gen_st_i32 22058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_st_tl tcg_gen_st_i32 22068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_add_tl tcg_gen_add_i32 22078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_addi_tl tcg_gen_addi_i32 22088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sub_tl tcg_gen_sub_i32 22098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_neg_tl tcg_gen_neg_i32 22105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_subfi_tl tcg_gen_subfi_i32 22118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_subi_tl tcg_gen_subi_i32 22128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_and_tl tcg_gen_and_i32 22138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_andi_tl tcg_gen_andi_i32 22148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_or_tl tcg_gen_or_i32 22158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ori_tl tcg_gen_ori_i32 22168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_xor_tl tcg_gen_xor_i32 22178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_xori_tl tcg_gen_xori_i32 22188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_not_tl tcg_gen_not_i32 22198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shl_tl tcg_gen_shl_i32 22208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shli_tl tcg_gen_shli_i32 22218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shr_tl tcg_gen_shr_i32 22228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_shri_tl tcg_gen_shri_i32 22238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sar_tl tcg_gen_sar_i32 22248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_sari_tl tcg_gen_sari_i32 22258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_brcond_tl tcg_gen_brcond_i32 22268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_brcondi_tl tcg_gen_brcondi_i32 2227b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#define tcg_gen_setcond_tl tcg_gen_setcond_i32 2228b9317727862dd690cc67bb51f71991c404f9e4f6David 'Digit' Turner#define tcg_gen_setcondi_tl tcg_gen_setcondi_i32 22298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_mul_tl tcg_gen_mul_i32 22308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_muli_tl tcg_gen_muli_i32 22315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_div_tl tcg_gen_div_i32 22325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rem_tl tcg_gen_rem_i32 22335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_divu_tl tcg_gen_divu_i32 22345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_remu_tl tcg_gen_remu_i32 22358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_discard_tl tcg_gen_discard_i32 22368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_trunc_tl_i32 tcg_gen_mov_i32 22378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_trunc_i64_tl tcg_gen_trunc_i64_i32 22388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_extu_i32_tl tcg_gen_mov_i32 22398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_i32_tl tcg_gen_mov_i32 22408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_extu_tl_i64 tcg_gen_extu_i32_i64 22418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_tl_i64 tcg_gen_ext_i32_i64 22428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext8u_tl tcg_gen_ext8u_i32 22438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext8s_tl tcg_gen_ext8s_i32 22448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext16u_tl tcg_gen_ext16u_i32 22458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext16s_tl tcg_gen_ext16s_i32 22468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext32u_tl tcg_gen_mov_i32 22478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext32s_tl tcg_gen_mov_i32 22485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_bswap16_tl tcg_gen_bswap16_i32 22495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_bswap32_tl tcg_gen_bswap32_i32 22505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_concat_tl_i64 tcg_gen_concat_i32_i64 22515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_andc_tl tcg_gen_andc_i32 22525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_eqv_tl tcg_gen_eqv_i32 22535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_nand_tl tcg_gen_nand_i32 22545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_nor_tl tcg_gen_nor_i32 22555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_orc_tl tcg_gen_orc_i32 22565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotl_tl tcg_gen_rotl_i32 22575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotli_tl tcg_gen_rotli_i32 22585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotr_tl tcg_gen_rotr_i32 22595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_gen_rotri_tl tcg_gen_rotri_i32 22608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_const_tl tcg_const_i32 22615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define tcg_const_local_tl tcg_const_local_i32 22628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 22638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 22648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TCG_TARGET_REG_BITS == 32 22658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_add_ptr tcg_gen_add_i32 22668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_addi_ptr tcg_gen_addi_i32 22678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_i32_ptr tcg_gen_mov_i32 22688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else /* TCG_TARGET_REG_BITS == 32 */ 22698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_add_ptr tcg_gen_add_i64 22708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_addi_ptr tcg_gen_addi_i64 22718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tcg_gen_ext_i32_ptr tcg_gen_ext_i32_i64 22728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif /* TCG_TARGET_REG_BITS != 32 */ 2273