Annotation of qemu/tcg/tcg-op.h, revision 1.1.1.4

1.1       root        1: /*
                      2:  * Tiny Code Generator for QEMU
                      3:  *
                      4:  * Copyright (c) 2008 Fabrice Bellard
                      5:  *
                      6:  * Permission is hereby granted, free of charge, to any person obtaining a copy
                      7:  * of this software and associated documentation files (the "Software"), to deal
                      8:  * in the Software without restriction, including without limitation the rights
                      9:  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
                     10:  * copies of the Software, and to permit persons to whom the Software is
                     11:  * furnished to do so, subject to the following conditions:
                     12:  *
                     13:  * The above copyright notice and this permission notice shall be included in
                     14:  * all copies or substantial portions of the Software.
                     15:  *
                     16:  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
                     17:  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
                     18:  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
                     19:  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
                     20:  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
                     21:  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
                     22:  * THE SOFTWARE.
                     23:  */
                     24: #include "tcg.h"
                     25: 
                     26: int gen_new_label(void);
                     27: 
1.1.1.4 ! root       28: static inline void tcg_gen_op1_i32(TCGOpcode opc, TCGv_i32 arg1)
1.1       root       29: {
                     30:     *gen_opc_ptr++ = opc;
                     31:     *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
                     32: }
                     33: 
1.1.1.4 ! root       34: static inline void tcg_gen_op1_i64(TCGOpcode opc, TCGv_i64 arg1)
1.1       root       35: {
                     36:     *gen_opc_ptr++ = opc;
                     37:     *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
                     38: }
                     39: 
1.1.1.4 ! root       40: static inline void tcg_gen_op1i(TCGOpcode opc, TCGArg arg1)
1.1       root       41: {
                     42:     *gen_opc_ptr++ = opc;
                     43:     *gen_opparam_ptr++ = arg1;
                     44: }
                     45: 
1.1.1.4 ! root       46: static inline void tcg_gen_op2_i32(TCGOpcode opc, TCGv_i32 arg1, TCGv_i32 arg2)
1.1       root       47: {
                     48:     *gen_opc_ptr++ = opc;
                     49:     *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
                     50:     *gen_opparam_ptr++ = GET_TCGV_I32(arg2);
                     51: }
                     52: 
1.1.1.4 ! root       53: static inline void tcg_gen_op2_i64(TCGOpcode opc, TCGv_i64 arg1, TCGv_i64 arg2)
1.1       root       54: {
                     55:     *gen_opc_ptr++ = opc;
                     56:     *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
                     57:     *gen_opparam_ptr++ = GET_TCGV_I64(arg2);
                     58: }
                     59: 
1.1.1.4 ! root       60: static inline void tcg_gen_op2i_i32(TCGOpcode opc, TCGv_i32 arg1, TCGArg arg2)
1.1       root       61: {
                     62:     *gen_opc_ptr++ = opc;
                     63:     *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
                     64:     *gen_opparam_ptr++ = arg2;
                     65: }
                     66: 
1.1.1.4 ! root       67: static inline void tcg_gen_op2i_i64(TCGOpcode opc, TCGv_i64 arg1, TCGArg arg2)
1.1       root       68: {
                     69:     *gen_opc_ptr++ = opc;
                     70:     *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
                     71:     *gen_opparam_ptr++ = arg2;
                     72: }
                     73: 
1.1.1.4 ! root       74: static inline void tcg_gen_op2ii(TCGOpcode opc, TCGArg arg1, TCGArg arg2)
1.1       root       75: {
                     76:     *gen_opc_ptr++ = opc;
                     77:     *gen_opparam_ptr++ = arg1;
                     78:     *gen_opparam_ptr++ = arg2;
                     79: }
                     80: 
1.1.1.4 ! root       81: static inline void tcg_gen_op3_i32(TCGOpcode opc, TCGv_i32 arg1, TCGv_i32 arg2,
1.1       root       82:                                    TCGv_i32 arg3)
                     83: {
                     84:     *gen_opc_ptr++ = opc;
                     85:     *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
                     86:     *gen_opparam_ptr++ = GET_TCGV_I32(arg2);
                     87:     *gen_opparam_ptr++ = GET_TCGV_I32(arg3);
                     88: }
                     89: 
1.1.1.4 ! root       90: static inline void tcg_gen_op3_i64(TCGOpcode opc, TCGv_i64 arg1, TCGv_i64 arg2,
1.1       root       91:                                    TCGv_i64 arg3)
                     92: {
                     93:     *gen_opc_ptr++ = opc;
                     94:     *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
                     95:     *gen_opparam_ptr++ = GET_TCGV_I64(arg2);
                     96:     *gen_opparam_ptr++ = GET_TCGV_I64(arg3);
                     97: }
                     98: 
1.1.1.4 ! root       99: static inline void tcg_gen_op3i_i32(TCGOpcode opc, TCGv_i32 arg1,
        !           100:                                     TCGv_i32 arg2, TCGArg arg3)
1.1       root      101: {
                    102:     *gen_opc_ptr++ = opc;
                    103:     *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
                    104:     *gen_opparam_ptr++ = GET_TCGV_I32(arg2);
                    105:     *gen_opparam_ptr++ = arg3;
                    106: }
                    107: 
1.1.1.4 ! root      108: static inline void tcg_gen_op3i_i64(TCGOpcode opc, TCGv_i64 arg1,
        !           109:                                     TCGv_i64 arg2, TCGArg arg3)
1.1       root      110: {
                    111:     *gen_opc_ptr++ = opc;
                    112:     *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
                    113:     *gen_opparam_ptr++ = GET_TCGV_I64(arg2);
                    114:     *gen_opparam_ptr++ = arg3;
                    115: }
                    116: 
1.1.1.4 ! root      117: static inline void tcg_gen_ldst_op_i32(TCGOpcode opc, TCGv_i32 val,
        !           118:                                        TCGv_ptr base, TCGArg offset)
1.1       root      119: {
                    120:     *gen_opc_ptr++ = opc;
                    121:     *gen_opparam_ptr++ = GET_TCGV_I32(val);
                    122:     *gen_opparam_ptr++ = GET_TCGV_PTR(base);
                    123:     *gen_opparam_ptr++ = offset;
                    124: }
                    125: 
1.1.1.4 ! root      126: static inline void tcg_gen_ldst_op_i64(TCGOpcode opc, TCGv_i64 val,
        !           127:                                        TCGv_ptr base, TCGArg offset)
1.1       root      128: {
                    129:     *gen_opc_ptr++ = opc;
                    130:     *gen_opparam_ptr++ = GET_TCGV_I64(val);
                    131:     *gen_opparam_ptr++ = GET_TCGV_PTR(base);
                    132:     *gen_opparam_ptr++ = offset;
                    133: }
                    134: 
1.1.1.4 ! root      135: static inline void tcg_gen_qemu_ldst_op_i64_i32(TCGOpcode opc, TCGv_i64 val,
        !           136:                                                 TCGv_i32 addr, TCGArg mem_index)
1.1       root      137: {
                    138:     *gen_opc_ptr++ = opc;
                    139:     *gen_opparam_ptr++ = GET_TCGV_I64(val);
                    140:     *gen_opparam_ptr++ = GET_TCGV_I32(addr);
                    141:     *gen_opparam_ptr++ = mem_index;
                    142: }
                    143: 
1.1.1.4 ! root      144: static inline void tcg_gen_qemu_ldst_op_i64_i64(TCGOpcode opc, TCGv_i64 val,
        !           145:                                                 TCGv_i64 addr, TCGArg mem_index)
1.1       root      146: {
                    147:     *gen_opc_ptr++ = opc;
                    148:     *gen_opparam_ptr++ = GET_TCGV_I64(val);
                    149:     *gen_opparam_ptr++ = GET_TCGV_I64(addr);
                    150:     *gen_opparam_ptr++ = mem_index;
                    151: }
                    152: 
1.1.1.4 ! root      153: static inline void tcg_gen_op4_i32(TCGOpcode opc, TCGv_i32 arg1, TCGv_i32 arg2,
1.1       root      154:                                    TCGv_i32 arg3, TCGv_i32 arg4)
                    155: {
                    156:     *gen_opc_ptr++ = opc;
                    157:     *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
                    158:     *gen_opparam_ptr++ = GET_TCGV_I32(arg2);
                    159:     *gen_opparam_ptr++ = GET_TCGV_I32(arg3);
                    160:     *gen_opparam_ptr++ = GET_TCGV_I32(arg4);
                    161: }
                    162: 
1.1.1.4 ! root      163: static inline void tcg_gen_op4_i64(TCGOpcode opc, TCGv_i64 arg1, TCGv_i64 arg2,
1.1       root      164:                                    TCGv_i64 arg3, TCGv_i64 arg4)
                    165: {
                    166:     *gen_opc_ptr++ = opc;
                    167:     *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
                    168:     *gen_opparam_ptr++ = GET_TCGV_I64(arg2);
                    169:     *gen_opparam_ptr++ = GET_TCGV_I64(arg3);
                    170:     *gen_opparam_ptr++ = GET_TCGV_I64(arg4);
                    171: }
                    172: 
1.1.1.4 ! root      173: static inline void tcg_gen_op4i_i32(TCGOpcode opc, TCGv_i32 arg1, TCGv_i32 arg2,
1.1       root      174:                                     TCGv_i32 arg3, TCGArg arg4)
                    175: {
                    176:     *gen_opc_ptr++ = opc;
                    177:     *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
                    178:     *gen_opparam_ptr++ = GET_TCGV_I32(arg2);
                    179:     *gen_opparam_ptr++ = GET_TCGV_I32(arg3);
                    180:     *gen_opparam_ptr++ = arg4;
                    181: }
                    182: 
1.1.1.4 ! root      183: static inline void tcg_gen_op4i_i64(TCGOpcode opc, TCGv_i64 arg1, TCGv_i64 arg2,
1.1       root      184:                                     TCGv_i64 arg3, TCGArg arg4)
                    185: {
                    186:     *gen_opc_ptr++ = opc;
                    187:     *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
                    188:     *gen_opparam_ptr++ = GET_TCGV_I64(arg2);
                    189:     *gen_opparam_ptr++ = GET_TCGV_I64(arg3);
                    190:     *gen_opparam_ptr++ = arg4;
                    191: }
                    192: 
1.1.1.4 ! root      193: static inline void tcg_gen_op4ii_i32(TCGOpcode opc, TCGv_i32 arg1, TCGv_i32 arg2,
1.1       root      194:                                      TCGArg arg3, TCGArg arg4)
                    195: {
                    196:     *gen_opc_ptr++ = opc;
                    197:     *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
                    198:     *gen_opparam_ptr++ = GET_TCGV_I32(arg2);
                    199:     *gen_opparam_ptr++ = arg3;
                    200:     *gen_opparam_ptr++ = arg4;
                    201: }
                    202: 
1.1.1.4 ! root      203: static inline void tcg_gen_op4ii_i64(TCGOpcode opc, TCGv_i64 arg1, TCGv_i64 arg2,
1.1       root      204:                                      TCGArg arg3, TCGArg arg4)
                    205: {
                    206:     *gen_opc_ptr++ = opc;
                    207:     *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
                    208:     *gen_opparam_ptr++ = GET_TCGV_I64(arg2);
                    209:     *gen_opparam_ptr++ = arg3;
                    210:     *gen_opparam_ptr++ = arg4;
                    211: }
                    212: 
1.1.1.4 ! root      213: static inline void tcg_gen_op5_i32(TCGOpcode opc, TCGv_i32 arg1, TCGv_i32 arg2,
1.1       root      214:                                    TCGv_i32 arg3, TCGv_i32 arg4, TCGv_i32 arg5)
                    215: {
                    216:     *gen_opc_ptr++ = opc;
                    217:     *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
                    218:     *gen_opparam_ptr++ = GET_TCGV_I32(arg2);
                    219:     *gen_opparam_ptr++ = GET_TCGV_I32(arg3);
                    220:     *gen_opparam_ptr++ = GET_TCGV_I32(arg4);
                    221:     *gen_opparam_ptr++ = GET_TCGV_I32(arg5);
                    222: }
                    223: 
1.1.1.4 ! root      224: static inline void tcg_gen_op5_i64(TCGOpcode opc, TCGv_i64 arg1, TCGv_i64 arg2,
1.1       root      225:                                    TCGv_i64 arg3, TCGv_i64 arg4, TCGv_i64 arg5)
                    226: {
                    227:     *gen_opc_ptr++ = opc;
                    228:     *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
                    229:     *gen_opparam_ptr++ = GET_TCGV_I64(arg2);
                    230:     *gen_opparam_ptr++ = GET_TCGV_I64(arg3);
                    231:     *gen_opparam_ptr++ = GET_TCGV_I64(arg4);
                    232:     *gen_opparam_ptr++ = GET_TCGV_I64(arg5);
                    233: }
                    234: 
1.1.1.4 ! root      235: static inline void tcg_gen_op5i_i32(TCGOpcode opc, TCGv_i32 arg1, TCGv_i32 arg2,
1.1       root      236:                                     TCGv_i32 arg3, TCGv_i32 arg4, TCGArg arg5)
                    237: {
                    238:     *gen_opc_ptr++ = opc;
                    239:     *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
                    240:     *gen_opparam_ptr++ = GET_TCGV_I32(arg2);
                    241:     *gen_opparam_ptr++ = GET_TCGV_I32(arg3);
                    242:     *gen_opparam_ptr++ = GET_TCGV_I32(arg4);
                    243:     *gen_opparam_ptr++ = arg5;
                    244: }
                    245: 
1.1.1.4 ! root      246: static inline void tcg_gen_op5i_i64(TCGOpcode opc, TCGv_i64 arg1, TCGv_i64 arg2,
1.1       root      247:                                     TCGv_i64 arg3, TCGv_i64 arg4, TCGArg arg5)
                    248: {
                    249:     *gen_opc_ptr++ = opc;
                    250:     *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
                    251:     *gen_opparam_ptr++ = GET_TCGV_I64(arg2);
                    252:     *gen_opparam_ptr++ = GET_TCGV_I64(arg3);
                    253:     *gen_opparam_ptr++ = GET_TCGV_I64(arg4);
                    254:     *gen_opparam_ptr++ = arg5;
                    255: }
                    256: 
1.1.1.4 ! root      257: static inline void tcg_gen_op6_i32(TCGOpcode opc, TCGv_i32 arg1, TCGv_i32 arg2,
1.1       root      258:                                    TCGv_i32 arg3, TCGv_i32 arg4, TCGv_i32 arg5,
                    259:                                    TCGv_i32 arg6)
                    260: {
                    261:     *gen_opc_ptr++ = opc;
                    262:     *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
                    263:     *gen_opparam_ptr++ = GET_TCGV_I32(arg2);
                    264:     *gen_opparam_ptr++ = GET_TCGV_I32(arg3);
                    265:     *gen_opparam_ptr++ = GET_TCGV_I32(arg4);
                    266:     *gen_opparam_ptr++ = GET_TCGV_I32(arg5);
                    267:     *gen_opparam_ptr++ = GET_TCGV_I32(arg6);
                    268: }
                    269: 
1.1.1.4 ! root      270: static inline void tcg_gen_op6_i64(TCGOpcode opc, TCGv_i64 arg1, TCGv_i64 arg2,
1.1       root      271:                                    TCGv_i64 arg3, TCGv_i64 arg4, TCGv_i64 arg5,
                    272:                                    TCGv_i64 arg6)
                    273: {
                    274:     *gen_opc_ptr++ = opc;
                    275:     *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
                    276:     *gen_opparam_ptr++ = GET_TCGV_I64(arg2);
                    277:     *gen_opparam_ptr++ = GET_TCGV_I64(arg3);
                    278:     *gen_opparam_ptr++ = GET_TCGV_I64(arg4);
                    279:     *gen_opparam_ptr++ = GET_TCGV_I64(arg5);
                    280:     *gen_opparam_ptr++ = GET_TCGV_I64(arg6);
                    281: }
                    282: 
1.1.1.4 ! root      283: static inline void tcg_gen_op6i_i32(TCGOpcode opc, TCGv_i32 arg1, TCGv_i32 arg2,
        !           284:                                     TCGv_i32 arg3, TCGv_i32 arg4,
        !           285:                                     TCGv_i32 arg5, TCGArg arg6)
        !           286: {
        !           287:     *gen_opc_ptr++ = opc;
        !           288:     *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
        !           289:     *gen_opparam_ptr++ = GET_TCGV_I32(arg2);
        !           290:     *gen_opparam_ptr++ = GET_TCGV_I32(arg3);
        !           291:     *gen_opparam_ptr++ = GET_TCGV_I32(arg4);
        !           292:     *gen_opparam_ptr++ = GET_TCGV_I32(arg5);
        !           293:     *gen_opparam_ptr++ = arg6;
        !           294: }
        !           295: 
        !           296: static inline void tcg_gen_op6i_i64(TCGOpcode opc, TCGv_i64 arg1, TCGv_i64 arg2,
        !           297:                                     TCGv_i64 arg3, TCGv_i64 arg4,
        !           298:                                     TCGv_i64 arg5, TCGArg arg6)
        !           299: {
        !           300:     *gen_opc_ptr++ = opc;
        !           301:     *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
        !           302:     *gen_opparam_ptr++ = GET_TCGV_I64(arg2);
        !           303:     *gen_opparam_ptr++ = GET_TCGV_I64(arg3);
        !           304:     *gen_opparam_ptr++ = GET_TCGV_I64(arg4);
        !           305:     *gen_opparam_ptr++ = GET_TCGV_I64(arg5);
        !           306:     *gen_opparam_ptr++ = arg6;
        !           307: }
        !           308: 
        !           309: static inline void tcg_gen_op6ii_i32(TCGOpcode opc, TCGv_i32 arg1,
        !           310:                                      TCGv_i32 arg2, TCGv_i32 arg3,
        !           311:                                      TCGv_i32 arg4, TCGArg arg5, TCGArg arg6)
1.1       root      312: {
                    313:     *gen_opc_ptr++ = opc;
                    314:     *gen_opparam_ptr++ = GET_TCGV_I32(arg1);
                    315:     *gen_opparam_ptr++ = GET_TCGV_I32(arg2);
                    316:     *gen_opparam_ptr++ = GET_TCGV_I32(arg3);
                    317:     *gen_opparam_ptr++ = GET_TCGV_I32(arg4);
                    318:     *gen_opparam_ptr++ = arg5;
                    319:     *gen_opparam_ptr++ = arg6;
                    320: }
                    321: 
1.1.1.4 ! root      322: static inline void tcg_gen_op6ii_i64(TCGOpcode opc, TCGv_i64 arg1,
        !           323:                                      TCGv_i64 arg2, TCGv_i64 arg3,
        !           324:                                      TCGv_i64 arg4, TCGArg arg5, TCGArg arg6)
1.1       root      325: {
                    326:     *gen_opc_ptr++ = opc;
                    327:     *gen_opparam_ptr++ = GET_TCGV_I64(arg1);
                    328:     *gen_opparam_ptr++ = GET_TCGV_I64(arg2);
                    329:     *gen_opparam_ptr++ = GET_TCGV_I64(arg3);
                    330:     *gen_opparam_ptr++ = GET_TCGV_I64(arg4);
                    331:     *gen_opparam_ptr++ = arg5;
                    332:     *gen_opparam_ptr++ = arg6;
                    333: }
                    334: 
                    335: static inline void gen_set_label(int n)
                    336: {
                    337:     tcg_gen_op1i(INDEX_op_set_label, n);
                    338: }
                    339: 
                    340: static inline void tcg_gen_br(int label)
                    341: {
                    342:     tcg_gen_op1i(INDEX_op_br, label);
                    343: }
                    344: 
                    345: static inline void tcg_gen_mov_i32(TCGv_i32 ret, TCGv_i32 arg)
                    346: {
1.1.1.2   root      347:     if (!TCGV_EQUAL_I32(ret, arg))
1.1       root      348:         tcg_gen_op2_i32(INDEX_op_mov_i32, ret, arg);
                    349: }
                    350: 
                    351: static inline void tcg_gen_movi_i32(TCGv_i32 ret, int32_t arg)
                    352: {
                    353:     tcg_gen_op2i_i32(INDEX_op_movi_i32, ret, arg);
                    354: }
                    355: 
1.1.1.4 ! root      356: /* A version of dh_sizemask from def-helper.h that doesn't rely on
        !           357:    preprocessor magic.  */
        !           358: static inline int tcg_gen_sizemask(int n, int is_64bit, int is_signed)
        !           359: {
        !           360:     return (is_64bit << n*2) | (is_signed << (n*2 + 1));
        !           361: }
        !           362: 
1.1       root      363: /* helper calls */
                    364: static inline void tcg_gen_helperN(void *func, int flags, int sizemask,
                    365:                                    TCGArg ret, int nargs, TCGArg *args)
                    366: {
                    367:     TCGv_ptr fn;
                    368:     fn = tcg_const_ptr((tcg_target_long)func);
                    369:     tcg_gen_callN(&tcg_ctx, fn, flags, sizemask, ret,
                    370:                   nargs, args);
                    371:     tcg_temp_free_ptr(fn);
                    372: }
                    373: 
1.1.1.4 ! root      374: /* Note: Both tcg_gen_helper32() and tcg_gen_helper64() are currently
        !           375:    reserved for helpers in tcg-runtime.c. These helpers are all const
        !           376:    and pure, hence the call to tcg_gen_callN() with TCG_CALL_CONST |
        !           377:    TCG_CALL_PURE. This may need to be adjusted if these functions
        !           378:    start to be used with other helpers. */
        !           379: static inline void tcg_gen_helper32(void *func, int sizemask, TCGv_i32 ret,
        !           380:                                     TCGv_i32 a, TCGv_i32 b)
        !           381: {
        !           382:     TCGv_ptr fn;
        !           383:     TCGArg args[2];
        !           384:     fn = tcg_const_ptr((tcg_target_long)func);
        !           385:     args[0] = GET_TCGV_I32(a);
        !           386:     args[1] = GET_TCGV_I32(b);
        !           387:     tcg_gen_callN(&tcg_ctx, fn, TCG_CALL_CONST | TCG_CALL_PURE, sizemask,
        !           388:                   GET_TCGV_I32(ret), 2, args);
        !           389:     tcg_temp_free_ptr(fn);
        !           390: }
        !           391: 
        !           392: static inline void tcg_gen_helper64(void *func, int sizemask, TCGv_i64 ret,
1.1       root      393:                                     TCGv_i64 a, TCGv_i64 b)
                    394: {
                    395:     TCGv_ptr fn;
                    396:     TCGArg args[2];
                    397:     fn = tcg_const_ptr((tcg_target_long)func);
                    398:     args[0] = GET_TCGV_I64(a);
                    399:     args[1] = GET_TCGV_I64(b);
1.1.1.4 ! root      400:     tcg_gen_callN(&tcg_ctx, fn, TCG_CALL_CONST | TCG_CALL_PURE, sizemask,
        !           401:                   GET_TCGV_I64(ret), 2, args);
1.1       root      402:     tcg_temp_free_ptr(fn);
                    403: }
                    404: 
                    405: /* 32 bit ops */
                    406: 
                    407: static inline void tcg_gen_ld8u_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset)
                    408: {
                    409:     tcg_gen_ldst_op_i32(INDEX_op_ld8u_i32, ret, arg2, offset);
                    410: }
                    411: 
                    412: static inline void tcg_gen_ld8s_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset)
                    413: {
                    414:     tcg_gen_ldst_op_i32(INDEX_op_ld8s_i32, ret, arg2, offset);
                    415: }
                    416: 
                    417: static inline void tcg_gen_ld16u_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset)
                    418: {
                    419:     tcg_gen_ldst_op_i32(INDEX_op_ld16u_i32, ret, arg2, offset);
                    420: }
                    421: 
                    422: static inline void tcg_gen_ld16s_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset)
                    423: {
                    424:     tcg_gen_ldst_op_i32(INDEX_op_ld16s_i32, ret, arg2, offset);
                    425: }
                    426: 
                    427: static inline void tcg_gen_ld_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset)
                    428: {
                    429:     tcg_gen_ldst_op_i32(INDEX_op_ld_i32, ret, arg2, offset);
                    430: }
                    431: 
                    432: static inline void tcg_gen_st8_i32(TCGv_i32 arg1, TCGv_ptr arg2, tcg_target_long offset)
                    433: {
                    434:     tcg_gen_ldst_op_i32(INDEX_op_st8_i32, arg1, arg2, offset);
                    435: }
                    436: 
                    437: static inline void tcg_gen_st16_i32(TCGv_i32 arg1, TCGv_ptr arg2, tcg_target_long offset)
                    438: {
                    439:     tcg_gen_ldst_op_i32(INDEX_op_st16_i32, arg1, arg2, offset);
                    440: }
                    441: 
                    442: static inline void tcg_gen_st_i32(TCGv_i32 arg1, TCGv_ptr arg2, tcg_target_long offset)
                    443: {
                    444:     tcg_gen_ldst_op_i32(INDEX_op_st_i32, arg1, arg2, offset);
                    445: }
                    446: 
                    447: static inline void tcg_gen_add_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
                    448: {
                    449:     tcg_gen_op3_i32(INDEX_op_add_i32, ret, arg1, arg2);
                    450: }
                    451: 
                    452: static inline void tcg_gen_addi_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
                    453: {
                    454:     /* some cases can be optimized here */
                    455:     if (arg2 == 0) {
                    456:         tcg_gen_mov_i32(ret, arg1);
                    457:     } else {
                    458:         TCGv_i32 t0 = tcg_const_i32(arg2);
                    459:         tcg_gen_add_i32(ret, arg1, t0);
                    460:         tcg_temp_free_i32(t0);
                    461:     }
                    462: }
                    463: 
                    464: static inline void tcg_gen_sub_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
                    465: {
                    466:     tcg_gen_op3_i32(INDEX_op_sub_i32, ret, arg1, arg2);
                    467: }
                    468: 
                    469: static inline void tcg_gen_subfi_i32(TCGv_i32 ret, int32_t arg1, TCGv_i32 arg2)
                    470: {
                    471:     TCGv_i32 t0 = tcg_const_i32(arg1);
                    472:     tcg_gen_sub_i32(ret, t0, arg2);
                    473:     tcg_temp_free_i32(t0);
                    474: }
                    475: 
                    476: static inline void tcg_gen_subi_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
                    477: {
                    478:     /* some cases can be optimized here */
                    479:     if (arg2 == 0) {
                    480:         tcg_gen_mov_i32(ret, arg1);
                    481:     } else {
                    482:         TCGv_i32 t0 = tcg_const_i32(arg2);
                    483:         tcg_gen_sub_i32(ret, arg1, t0);
                    484:         tcg_temp_free_i32(t0);
                    485:     }
                    486: }
                    487: 
                    488: static inline void tcg_gen_and_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
                    489: {
1.1.1.2   root      490:     if (TCGV_EQUAL_I32(arg1, arg2)) {
                    491:         tcg_gen_mov_i32(ret, arg1);
                    492:     } else {
                    493:         tcg_gen_op3_i32(INDEX_op_and_i32, ret, arg1, arg2);
                    494:     }
1.1       root      495: }
                    496: 
                    497: static inline void tcg_gen_andi_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
                    498: {
                    499:     /* some cases can be optimized here */
                    500:     if (arg2 == 0) {
                    501:         tcg_gen_movi_i32(ret, 0);
                    502:     } else if (arg2 == 0xffffffff) {
                    503:         tcg_gen_mov_i32(ret, arg1);
                    504:     } else {
                    505:         TCGv_i32 t0 = tcg_const_i32(arg2);
                    506:         tcg_gen_and_i32(ret, arg1, t0);
                    507:         tcg_temp_free_i32(t0);
                    508:     }
                    509: }
                    510: 
                    511: static inline void tcg_gen_or_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
                    512: {
1.1.1.2   root      513:     if (TCGV_EQUAL_I32(arg1, arg2)) {
                    514:         tcg_gen_mov_i32(ret, arg1);
                    515:     } else {
                    516:         tcg_gen_op3_i32(INDEX_op_or_i32, ret, arg1, arg2);
                    517:     }
1.1       root      518: }
                    519: 
                    520: static inline void tcg_gen_ori_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
                    521: {
                    522:     /* some cases can be optimized here */
                    523:     if (arg2 == 0xffffffff) {
                    524:         tcg_gen_movi_i32(ret, 0xffffffff);
                    525:     } else if (arg2 == 0) {
                    526:         tcg_gen_mov_i32(ret, arg1);
                    527:     } else {
                    528:         TCGv_i32 t0 = tcg_const_i32(arg2);
                    529:         tcg_gen_or_i32(ret, arg1, t0);
                    530:         tcg_temp_free_i32(t0);
                    531:     }
                    532: }
                    533: 
                    534: static inline void tcg_gen_xor_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
                    535: {
1.1.1.2   root      536:     if (TCGV_EQUAL_I32(arg1, arg2)) {
                    537:         tcg_gen_movi_i32(ret, 0);
                    538:     } else {
                    539:         tcg_gen_op3_i32(INDEX_op_xor_i32, ret, arg1, arg2);
                    540:     }
1.1       root      541: }
                    542: 
                    543: static inline void tcg_gen_xori_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
                    544: {
                    545:     /* some cases can be optimized here */
                    546:     if (arg2 == 0) {
                    547:         tcg_gen_mov_i32(ret, arg1);
                    548:     } else {
                    549:         TCGv_i32 t0 = tcg_const_i32(arg2);
                    550:         tcg_gen_xor_i32(ret, arg1, t0);
                    551:         tcg_temp_free_i32(t0);
                    552:     }
                    553: }
                    554: 
                    555: static inline void tcg_gen_shl_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
                    556: {
                    557:     tcg_gen_op3_i32(INDEX_op_shl_i32, ret, arg1, arg2);
                    558: }
                    559: 
                    560: static inline void tcg_gen_shli_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
                    561: {
                    562:     if (arg2 == 0) {
                    563:         tcg_gen_mov_i32(ret, arg1);
                    564:     } else {
                    565:         TCGv_i32 t0 = tcg_const_i32(arg2);
                    566:         tcg_gen_shl_i32(ret, arg1, t0);
                    567:         tcg_temp_free_i32(t0);
                    568:     }
                    569: }
                    570: 
                    571: static inline void tcg_gen_shr_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
                    572: {
                    573:     tcg_gen_op3_i32(INDEX_op_shr_i32, ret, arg1, arg2);
                    574: }
                    575: 
                    576: static inline void tcg_gen_shri_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
                    577: {
                    578:     if (arg2 == 0) {
                    579:         tcg_gen_mov_i32(ret, arg1);
                    580:     } else {
                    581:         TCGv_i32 t0 = tcg_const_i32(arg2);
                    582:         tcg_gen_shr_i32(ret, arg1, t0);
                    583:         tcg_temp_free_i32(t0);
                    584:     }
                    585: }
                    586: 
                    587: static inline void tcg_gen_sar_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
                    588: {
                    589:     tcg_gen_op3_i32(INDEX_op_sar_i32, ret, arg1, arg2);
                    590: }
                    591: 
                    592: static inline void tcg_gen_sari_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
                    593: {
                    594:     if (arg2 == 0) {
                    595:         tcg_gen_mov_i32(ret, arg1);
                    596:     } else {
                    597:         TCGv_i32 t0 = tcg_const_i32(arg2);
                    598:         tcg_gen_sar_i32(ret, arg1, t0);
                    599:         tcg_temp_free_i32(t0);
                    600:     }
                    601: }
                    602: 
1.1.1.4 ! root      603: static inline void tcg_gen_brcond_i32(TCGCond cond, TCGv_i32 arg1,
        !           604:                                       TCGv_i32 arg2, int label_index)
1.1       root      605: {
                    606:     tcg_gen_op4ii_i32(INDEX_op_brcond_i32, arg1, arg2, cond, label_index);
                    607: }
                    608: 
1.1.1.4 ! root      609: static inline void tcg_gen_brcondi_i32(TCGCond cond, TCGv_i32 arg1,
        !           610:                                        int32_t arg2, int label_index)
1.1       root      611: {
                    612:     TCGv_i32 t0 = tcg_const_i32(arg2);
                    613:     tcg_gen_brcond_i32(cond, arg1, t0, label_index);
                    614:     tcg_temp_free_i32(t0);
                    615: }
                    616: 
1.1.1.4 ! root      617: static inline void tcg_gen_setcond_i32(TCGCond cond, TCGv_i32 ret,
        !           618:                                        TCGv_i32 arg1, TCGv_i32 arg2)
        !           619: {
        !           620:     tcg_gen_op4i_i32(INDEX_op_setcond_i32, ret, arg1, arg2, cond);
        !           621: }
        !           622: 
        !           623: static inline void tcg_gen_setcondi_i32(TCGCond cond, TCGv_i32 ret,
        !           624:                                         TCGv_i32 arg1, int32_t arg2)
        !           625: {
        !           626:     TCGv_i32 t0 = tcg_const_i32(arg2);
        !           627:     tcg_gen_setcond_i32(cond, ret, arg1, t0);
        !           628:     tcg_temp_free_i32(t0);
        !           629: }
        !           630: 
1.1       root      631: static inline void tcg_gen_mul_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
                    632: {
                    633:     tcg_gen_op3_i32(INDEX_op_mul_i32, ret, arg1, arg2);
                    634: }
                    635: 
                    636: static inline void tcg_gen_muli_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
                    637: {
                    638:     TCGv_i32 t0 = tcg_const_i32(arg2);
                    639:     tcg_gen_mul_i32(ret, arg1, t0);
                    640:     tcg_temp_free_i32(t0);
                    641: }
                    642: 
                    643: #ifdef TCG_TARGET_HAS_div_i32
                    644: static inline void tcg_gen_div_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
                    645: {
                    646:     tcg_gen_op3_i32(INDEX_op_div_i32, ret, arg1, arg2);
                    647: }
                    648: 
                    649: static inline void tcg_gen_rem_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
                    650: {
                    651:     tcg_gen_op3_i32(INDEX_op_rem_i32, ret, arg1, arg2);
                    652: }
                    653: 
                    654: static inline void tcg_gen_divu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
                    655: {
                    656:     tcg_gen_op3_i32(INDEX_op_divu_i32, ret, arg1, arg2);
                    657: }
                    658: 
                    659: static inline void tcg_gen_remu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
                    660: {
                    661:     tcg_gen_op3_i32(INDEX_op_remu_i32, ret, arg1, arg2);
                    662: }
1.1.1.4 ! root      663: #elif defined(TCG_TARGET_HAS_div2_i32)
1.1       root      664: static inline void tcg_gen_div_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
                    665: {
                    666:     TCGv_i32 t0;
                    667:     t0 = tcg_temp_new_i32();
                    668:     tcg_gen_sari_i32(t0, arg1, 31);
                    669:     tcg_gen_op5_i32(INDEX_op_div2_i32, ret, t0, arg1, t0, arg2);
                    670:     tcg_temp_free_i32(t0);
                    671: }
                    672: 
                    673: static inline void tcg_gen_rem_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
                    674: {
                    675:     TCGv_i32 t0;
                    676:     t0 = tcg_temp_new_i32();
                    677:     tcg_gen_sari_i32(t0, arg1, 31);
                    678:     tcg_gen_op5_i32(INDEX_op_div2_i32, t0, ret, arg1, t0, arg2);
                    679:     tcg_temp_free_i32(t0);
                    680: }
                    681: 
                    682: static inline void tcg_gen_divu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
                    683: {
                    684:     TCGv_i32 t0;
                    685:     t0 = tcg_temp_new_i32();
                    686:     tcg_gen_movi_i32(t0, 0);
                    687:     tcg_gen_op5_i32(INDEX_op_divu2_i32, ret, t0, arg1, t0, arg2);
                    688:     tcg_temp_free_i32(t0);
                    689: }
                    690: 
                    691: static inline void tcg_gen_remu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
                    692: {
                    693:     TCGv_i32 t0;
                    694:     t0 = tcg_temp_new_i32();
                    695:     tcg_gen_movi_i32(t0, 0);
                    696:     tcg_gen_op5_i32(INDEX_op_divu2_i32, t0, ret, arg1, t0, arg2);
                    697:     tcg_temp_free_i32(t0);
                    698: }
1.1.1.4 ! root      699: #else
        !           700: static inline void tcg_gen_div_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
        !           701: {
        !           702:     int sizemask = 0;
        !           703:     /* Return value and both arguments are 32-bit and signed.  */
        !           704:     sizemask |= tcg_gen_sizemask(0, 0, 1);
        !           705:     sizemask |= tcg_gen_sizemask(1, 0, 1);
        !           706:     sizemask |= tcg_gen_sizemask(2, 0, 1);
        !           707: 
        !           708:     tcg_gen_helper32(tcg_helper_div_i32, sizemask, ret, arg1, arg2);
        !           709: }
        !           710: 
        !           711: static inline void tcg_gen_rem_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
        !           712: {
        !           713:     int sizemask = 0;
        !           714:     /* Return value and both arguments are 32-bit and signed.  */
        !           715:     sizemask |= tcg_gen_sizemask(0, 0, 1);
        !           716:     sizemask |= tcg_gen_sizemask(1, 0, 1);
        !           717:     sizemask |= tcg_gen_sizemask(2, 0, 1);
        !           718: 
        !           719:     tcg_gen_helper32(tcg_helper_rem_i32, sizemask, ret, arg1, arg2);
        !           720: }
        !           721: 
        !           722: static inline void tcg_gen_divu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
        !           723: {
        !           724:     int sizemask = 0;
        !           725:     /* Return value and both arguments are 32-bit and unsigned.  */
        !           726:     sizemask |= tcg_gen_sizemask(0, 0, 0);
        !           727:     sizemask |= tcg_gen_sizemask(1, 0, 0);
        !           728:     sizemask |= tcg_gen_sizemask(2, 0, 0);
        !           729: 
        !           730:     tcg_gen_helper32(tcg_helper_divu_i32, ret, arg1, arg2, 0);
        !           731: }
        !           732: 
        !           733: static inline void tcg_gen_remu_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
        !           734: {
        !           735:     int sizemask = 0;
        !           736:     /* Return value and both arguments are 32-bit and unsigned.  */
        !           737:     sizemask |= tcg_gen_sizemask(0, 0, 0);
        !           738:     sizemask |= tcg_gen_sizemask(1, 0, 0);
        !           739:     sizemask |= tcg_gen_sizemask(2, 0, 0);
        !           740: 
        !           741:     tcg_gen_helper32(tcg_helper_remu_i32, ret, arg1, arg2, 0);
        !           742: }
1.1       root      743: #endif
                    744: 
                    745: #if TCG_TARGET_REG_BITS == 32
                    746: 
                    747: static inline void tcg_gen_mov_i64(TCGv_i64 ret, TCGv_i64 arg)
                    748: {
1.1.1.2   root      749:     if (!TCGV_EQUAL_I64(ret, arg)) {
1.1       root      750:         tcg_gen_mov_i32(TCGV_LOW(ret), TCGV_LOW(arg));
                    751:         tcg_gen_mov_i32(TCGV_HIGH(ret), TCGV_HIGH(arg));
                    752:     }
                    753: }
                    754: 
                    755: static inline void tcg_gen_movi_i64(TCGv_i64 ret, int64_t arg)
                    756: {
                    757:     tcg_gen_movi_i32(TCGV_LOW(ret), arg);
                    758:     tcg_gen_movi_i32(TCGV_HIGH(ret), arg >> 32);
                    759: }
                    760: 
                    761: static inline void tcg_gen_ld8u_i64(TCGv_i64 ret, TCGv_ptr arg2,
                    762:                                     tcg_target_long offset)
                    763: {
                    764:     tcg_gen_ld8u_i32(TCGV_LOW(ret), arg2, offset);
                    765:     tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
                    766: }
                    767: 
                    768: static inline void tcg_gen_ld8s_i64(TCGv_i64 ret, TCGv_ptr arg2,
                    769:                                     tcg_target_long offset)
                    770: {
                    771:     tcg_gen_ld8s_i32(TCGV_LOW(ret), arg2, offset);
                    772:     tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_HIGH(ret), 31);
                    773: }
                    774: 
                    775: static inline void tcg_gen_ld16u_i64(TCGv_i64 ret, TCGv_ptr arg2,
                    776:                                      tcg_target_long offset)
                    777: {
                    778:     tcg_gen_ld16u_i32(TCGV_LOW(ret), arg2, offset);
                    779:     tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
                    780: }
                    781: 
                    782: static inline void tcg_gen_ld16s_i64(TCGv_i64 ret, TCGv_ptr arg2,
                    783:                                      tcg_target_long offset)
                    784: {
                    785:     tcg_gen_ld16s_i32(TCGV_LOW(ret), arg2, offset);
                    786:     tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
                    787: }
                    788: 
                    789: static inline void tcg_gen_ld32u_i64(TCGv_i64 ret, TCGv_ptr arg2,
                    790:                                      tcg_target_long offset)
                    791: {
                    792:     tcg_gen_ld_i32(TCGV_LOW(ret), arg2, offset);
                    793:     tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
                    794: }
                    795: 
                    796: static inline void tcg_gen_ld32s_i64(TCGv_i64 ret, TCGv_ptr arg2,
                    797:                                      tcg_target_long offset)
                    798: {
                    799:     tcg_gen_ld_i32(TCGV_LOW(ret), arg2, offset);
                    800:     tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
                    801: }
                    802: 
                    803: static inline void tcg_gen_ld_i64(TCGv_i64 ret, TCGv_ptr arg2,
                    804:                                   tcg_target_long offset)
                    805: {
                    806:     /* since arg2 and ret have different types, they cannot be the
                    807:        same temporary */
                    808: #ifdef TCG_TARGET_WORDS_BIGENDIAN
                    809:     tcg_gen_ld_i32(TCGV_HIGH(ret), arg2, offset);
                    810:     tcg_gen_ld_i32(TCGV_LOW(ret), arg2, offset + 4);
                    811: #else
                    812:     tcg_gen_ld_i32(TCGV_LOW(ret), arg2, offset);
                    813:     tcg_gen_ld_i32(TCGV_HIGH(ret), arg2, offset + 4);
                    814: #endif
                    815: }
                    816: 
                    817: static inline void tcg_gen_st8_i64(TCGv_i64 arg1, TCGv_ptr arg2,
                    818:                                    tcg_target_long offset)
                    819: {
                    820:     tcg_gen_st8_i32(TCGV_LOW(arg1), arg2, offset);
                    821: }
                    822: 
                    823: static inline void tcg_gen_st16_i64(TCGv_i64 arg1, TCGv_ptr arg2,
                    824:                                     tcg_target_long offset)
                    825: {
                    826:     tcg_gen_st16_i32(TCGV_LOW(arg1), arg2, offset);
                    827: }
                    828: 
                    829: static inline void tcg_gen_st32_i64(TCGv_i64 arg1, TCGv_ptr arg2,
                    830:                                     tcg_target_long offset)
                    831: {
                    832:     tcg_gen_st_i32(TCGV_LOW(arg1), arg2, offset);
                    833: }
                    834: 
                    835: static inline void tcg_gen_st_i64(TCGv_i64 arg1, TCGv_ptr arg2,
                    836:                                   tcg_target_long offset)
                    837: {
                    838: #ifdef TCG_TARGET_WORDS_BIGENDIAN
                    839:     tcg_gen_st_i32(TCGV_HIGH(arg1), arg2, offset);
                    840:     tcg_gen_st_i32(TCGV_LOW(arg1), arg2, offset + 4);
                    841: #else
                    842:     tcg_gen_st_i32(TCGV_LOW(arg1), arg2, offset);
                    843:     tcg_gen_st_i32(TCGV_HIGH(arg1), arg2, offset + 4);
                    844: #endif
                    845: }
                    846: 
                    847: static inline void tcg_gen_add_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                    848: {
                    849:     tcg_gen_op6_i32(INDEX_op_add2_i32, TCGV_LOW(ret), TCGV_HIGH(ret),
                    850:                     TCGV_LOW(arg1), TCGV_HIGH(arg1), TCGV_LOW(arg2),
                    851:                     TCGV_HIGH(arg2));
                    852: }
                    853: 
                    854: static inline void tcg_gen_sub_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                    855: {
                    856:     tcg_gen_op6_i32(INDEX_op_sub2_i32, TCGV_LOW(ret), TCGV_HIGH(ret),
                    857:                     TCGV_LOW(arg1), TCGV_HIGH(arg1), TCGV_LOW(arg2),
                    858:                     TCGV_HIGH(arg2));
                    859: }
                    860: 
                    861: static inline void tcg_gen_and_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                    862: {
                    863:     tcg_gen_and_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2));
                    864:     tcg_gen_and_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2));
                    865: }
                    866: 
                    867: static inline void tcg_gen_andi_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
                    868: {
                    869:     tcg_gen_andi_i32(TCGV_LOW(ret), TCGV_LOW(arg1), arg2);
                    870:     tcg_gen_andi_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), arg2 >> 32);
                    871: }
                    872: 
                    873: static inline void tcg_gen_or_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                    874: {
                    875:     tcg_gen_or_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2));
                    876:     tcg_gen_or_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2));
                    877: }
                    878: 
                    879: static inline void tcg_gen_ori_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
                    880: {
                    881:     tcg_gen_ori_i32(TCGV_LOW(ret), TCGV_LOW(arg1), arg2);
                    882:     tcg_gen_ori_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), arg2 >> 32);
                    883: }
                    884: 
                    885: static inline void tcg_gen_xor_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                    886: {
                    887:     tcg_gen_xor_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2));
                    888:     tcg_gen_xor_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2));
                    889: }
                    890: 
                    891: static inline void tcg_gen_xori_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
                    892: {
                    893:     tcg_gen_xori_i32(TCGV_LOW(ret), TCGV_LOW(arg1), arg2);
                    894:     tcg_gen_xori_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), arg2 >> 32);
                    895: }
                    896: 
                    897: /* XXX: use generic code when basic block handling is OK or CPU
                    898:    specific code (x86) */
                    899: static inline void tcg_gen_shl_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                    900: {
1.1.1.4 ! root      901:     int sizemask = 0;
        !           902:     /* Return value and both arguments are 64-bit and signed.  */
        !           903:     sizemask |= tcg_gen_sizemask(0, 1, 1);
        !           904:     sizemask |= tcg_gen_sizemask(1, 1, 1);
        !           905:     sizemask |= tcg_gen_sizemask(2, 1, 1);
        !           906: 
        !           907:     tcg_gen_helper64(tcg_helper_shl_i64, sizemask, ret, arg1, arg2);
1.1       root      908: }
                    909: 
                    910: static inline void tcg_gen_shli_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
                    911: {
                    912:     tcg_gen_shifti_i64(ret, arg1, arg2, 0, 0);
                    913: }
                    914: 
                    915: static inline void tcg_gen_shr_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                    916: {
1.1.1.4 ! root      917:     int sizemask = 0;
        !           918:     /* Return value and both arguments are 64-bit and signed.  */
        !           919:     sizemask |= tcg_gen_sizemask(0, 1, 1);
        !           920:     sizemask |= tcg_gen_sizemask(1, 1, 1);
        !           921:     sizemask |= tcg_gen_sizemask(2, 1, 1);
        !           922: 
        !           923:     tcg_gen_helper64(tcg_helper_shr_i64, sizemask, ret, arg1, arg2);
1.1       root      924: }
                    925: 
                    926: static inline void tcg_gen_shri_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
                    927: {
                    928:     tcg_gen_shifti_i64(ret, arg1, arg2, 1, 0);
                    929: }
                    930: 
                    931: static inline void tcg_gen_sar_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                    932: {
1.1.1.4 ! root      933:     int sizemask = 0;
        !           934:     /* Return value and both arguments are 64-bit and signed.  */
        !           935:     sizemask |= tcg_gen_sizemask(0, 1, 1);
        !           936:     sizemask |= tcg_gen_sizemask(1, 1, 1);
        !           937:     sizemask |= tcg_gen_sizemask(2, 1, 1);
        !           938: 
        !           939:     tcg_gen_helper64(tcg_helper_sar_i64, sizemask, ret, arg1, arg2);
1.1       root      940: }
                    941: 
                    942: static inline void tcg_gen_sari_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
                    943: {
                    944:     tcg_gen_shifti_i64(ret, arg1, arg2, 1, 1);
                    945: }
                    946: 
1.1.1.4 ! root      947: static inline void tcg_gen_brcond_i64(TCGCond cond, TCGv_i64 arg1,
        !           948:                                       TCGv_i64 arg2, int label_index)
1.1       root      949: {
                    950:     tcg_gen_op6ii_i32(INDEX_op_brcond2_i32,
                    951:                       TCGV_LOW(arg1), TCGV_HIGH(arg1), TCGV_LOW(arg2),
                    952:                       TCGV_HIGH(arg2), cond, label_index);
                    953: }
                    954: 
1.1.1.4 ! root      955: static inline void tcg_gen_setcond_i64(TCGCond cond, TCGv_i64 ret,
        !           956:                                        TCGv_i64 arg1, TCGv_i64 arg2)
        !           957: {
        !           958:     tcg_gen_op6i_i32(INDEX_op_setcond2_i32, TCGV_LOW(ret),
        !           959:                      TCGV_LOW(arg1), TCGV_HIGH(arg1),
        !           960:                      TCGV_LOW(arg2), TCGV_HIGH(arg2), cond);
        !           961:     tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
        !           962: }
        !           963: 
1.1       root      964: static inline void tcg_gen_mul_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                    965: {
                    966:     TCGv_i64 t0;
                    967:     TCGv_i32 t1;
                    968: 
                    969:     t0 = tcg_temp_new_i64();
                    970:     t1 = tcg_temp_new_i32();
                    971: 
                    972:     tcg_gen_op4_i32(INDEX_op_mulu2_i32, TCGV_LOW(t0), TCGV_HIGH(t0),
                    973:                     TCGV_LOW(arg1), TCGV_LOW(arg2));
                    974: 
                    975:     tcg_gen_mul_i32(t1, TCGV_LOW(arg1), TCGV_HIGH(arg2));
                    976:     tcg_gen_add_i32(TCGV_HIGH(t0), TCGV_HIGH(t0), t1);
                    977:     tcg_gen_mul_i32(t1, TCGV_HIGH(arg1), TCGV_LOW(arg2));
                    978:     tcg_gen_add_i32(TCGV_HIGH(t0), TCGV_HIGH(t0), t1);
                    979: 
                    980:     tcg_gen_mov_i64(ret, t0);
                    981:     tcg_temp_free_i64(t0);
                    982:     tcg_temp_free_i32(t1);
                    983: }
                    984: 
                    985: static inline void tcg_gen_div_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                    986: {
1.1.1.4 ! root      987:     int sizemask = 0;
        !           988:     /* Return value and both arguments are 64-bit and signed.  */
        !           989:     sizemask |= tcg_gen_sizemask(0, 1, 1);
        !           990:     sizemask |= tcg_gen_sizemask(1, 1, 1);
        !           991:     sizemask |= tcg_gen_sizemask(2, 1, 1);
        !           992: 
        !           993:     tcg_gen_helper64(tcg_helper_div_i64, sizemask, ret, arg1, arg2);
1.1       root      994: }
                    995: 
                    996: static inline void tcg_gen_rem_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                    997: {
1.1.1.4 ! root      998:     int sizemask = 0;
        !           999:     /* Return value and both arguments are 64-bit and signed.  */
        !          1000:     sizemask |= tcg_gen_sizemask(0, 1, 1);
        !          1001:     sizemask |= tcg_gen_sizemask(1, 1, 1);
        !          1002:     sizemask |= tcg_gen_sizemask(2, 1, 1);
        !          1003: 
        !          1004:     tcg_gen_helper64(tcg_helper_rem_i64, sizemask, ret, arg1, arg2);
1.1       root     1005: }
                   1006: 
                   1007: static inline void tcg_gen_divu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                   1008: {
1.1.1.4 ! root     1009:     int sizemask = 0;
        !          1010:     /* Return value and both arguments are 64-bit and unsigned.  */
        !          1011:     sizemask |= tcg_gen_sizemask(0, 1, 0);
        !          1012:     sizemask |= tcg_gen_sizemask(1, 1, 0);
        !          1013:     sizemask |= tcg_gen_sizemask(2, 1, 0);
        !          1014: 
        !          1015:     tcg_gen_helper64(tcg_helper_divu_i64, sizemask, ret, arg1, arg2);
1.1       root     1016: }
                   1017: 
                   1018: static inline void tcg_gen_remu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                   1019: {
1.1.1.4 ! root     1020:     int sizemask = 0;
        !          1021:     /* Return value and both arguments are 64-bit and unsigned.  */
        !          1022:     sizemask |= tcg_gen_sizemask(0, 1, 0);
        !          1023:     sizemask |= tcg_gen_sizemask(1, 1, 0);
        !          1024:     sizemask |= tcg_gen_sizemask(2, 1, 0);
        !          1025: 
        !          1026:     tcg_gen_helper64(tcg_helper_remu_i64, sizemask, ret, arg1, arg2);
1.1       root     1027: }
                   1028: 
                   1029: #else
                   1030: 
                   1031: static inline void tcg_gen_mov_i64(TCGv_i64 ret, TCGv_i64 arg)
                   1032: {
1.1.1.2   root     1033:     if (!TCGV_EQUAL_I64(ret, arg))
1.1       root     1034:         tcg_gen_op2_i64(INDEX_op_mov_i64, ret, arg);
                   1035: }
                   1036: 
                   1037: static inline void tcg_gen_movi_i64(TCGv_i64 ret, int64_t arg)
                   1038: {
                   1039:     tcg_gen_op2i_i64(INDEX_op_movi_i64, ret, arg);
                   1040: }
                   1041: 
                   1042: static inline void tcg_gen_ld8u_i64(TCGv_i64 ret, TCGv_i64 arg2,
                   1043:                                     tcg_target_long offset)
                   1044: {
                   1045:     tcg_gen_ldst_op_i64(INDEX_op_ld8u_i64, ret, arg2, offset);
                   1046: }
                   1047: 
                   1048: static inline void tcg_gen_ld8s_i64(TCGv_i64 ret, TCGv_i64 arg2,
                   1049:                                     tcg_target_long offset)
                   1050: {
                   1051:     tcg_gen_ldst_op_i64(INDEX_op_ld8s_i64, ret, arg2, offset);
                   1052: }
                   1053: 
                   1054: static inline void tcg_gen_ld16u_i64(TCGv_i64 ret, TCGv_i64 arg2,
                   1055:                                      tcg_target_long offset)
                   1056: {
                   1057:     tcg_gen_ldst_op_i64(INDEX_op_ld16u_i64, ret, arg2, offset);
                   1058: }
                   1059: 
                   1060: static inline void tcg_gen_ld16s_i64(TCGv_i64 ret, TCGv_i64 arg2,
                   1061:                                      tcg_target_long offset)
                   1062: {
                   1063:     tcg_gen_ldst_op_i64(INDEX_op_ld16s_i64, ret, arg2, offset);
                   1064: }
                   1065: 
                   1066: static inline void tcg_gen_ld32u_i64(TCGv_i64 ret, TCGv_i64 arg2,
                   1067:                                      tcg_target_long offset)
                   1068: {
                   1069:     tcg_gen_ldst_op_i64(INDEX_op_ld32u_i64, ret, arg2, offset);
                   1070: }
                   1071: 
                   1072: static inline void tcg_gen_ld32s_i64(TCGv_i64 ret, TCGv_i64 arg2,
                   1073:                                      tcg_target_long offset)
                   1074: {
                   1075:     tcg_gen_ldst_op_i64(INDEX_op_ld32s_i64, ret, arg2, offset);
                   1076: }
                   1077: 
                   1078: static inline void tcg_gen_ld_i64(TCGv_i64 ret, TCGv_i64 arg2, tcg_target_long offset)
                   1079: {
                   1080:     tcg_gen_ldst_op_i64(INDEX_op_ld_i64, ret, arg2, offset);
                   1081: }
                   1082: 
                   1083: static inline void tcg_gen_st8_i64(TCGv_i64 arg1, TCGv_i64 arg2,
                   1084:                                    tcg_target_long offset)
                   1085: {
                   1086:     tcg_gen_ldst_op_i64(INDEX_op_st8_i64, arg1, arg2, offset);
                   1087: }
                   1088: 
                   1089: static inline void tcg_gen_st16_i64(TCGv_i64 arg1, TCGv_i64 arg2,
                   1090:                                     tcg_target_long offset)
                   1091: {
                   1092:     tcg_gen_ldst_op_i64(INDEX_op_st16_i64, arg1, arg2, offset);
                   1093: }
                   1094: 
                   1095: static inline void tcg_gen_st32_i64(TCGv_i64 arg1, TCGv_i64 arg2,
                   1096:                                     tcg_target_long offset)
                   1097: {
                   1098:     tcg_gen_ldst_op_i64(INDEX_op_st32_i64, arg1, arg2, offset);
                   1099: }
                   1100: 
                   1101: static inline void tcg_gen_st_i64(TCGv_i64 arg1, TCGv_i64 arg2, tcg_target_long offset)
                   1102: {
                   1103:     tcg_gen_ldst_op_i64(INDEX_op_st_i64, arg1, arg2, offset);
                   1104: }
                   1105: 
                   1106: static inline void tcg_gen_add_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                   1107: {
                   1108:     tcg_gen_op3_i64(INDEX_op_add_i64, ret, arg1, arg2);
                   1109: }
                   1110: 
                   1111: static inline void tcg_gen_sub_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                   1112: {
                   1113:     tcg_gen_op3_i64(INDEX_op_sub_i64, ret, arg1, arg2);
                   1114: }
                   1115: 
                   1116: static inline void tcg_gen_and_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                   1117: {
1.1.1.2   root     1118:     if (TCGV_EQUAL_I64(arg1, arg2)) {
                   1119:         tcg_gen_mov_i64(ret, arg1);
                   1120:     } else {
                   1121:         tcg_gen_op3_i64(INDEX_op_and_i64, ret, arg1, arg2);
                   1122:     }
1.1       root     1123: }
                   1124: 
                   1125: static inline void tcg_gen_andi_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
                   1126: {
                   1127:     TCGv_i64 t0 = tcg_const_i64(arg2);
                   1128:     tcg_gen_and_i64(ret, arg1, t0);
                   1129:     tcg_temp_free_i64(t0);
                   1130: }
                   1131: 
                   1132: static inline void tcg_gen_or_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                   1133: {
1.1.1.2   root     1134:     if (TCGV_EQUAL_I64(arg1, arg2)) {
                   1135:         tcg_gen_mov_i64(ret, arg1);
                   1136:     } else {
                   1137:         tcg_gen_op3_i64(INDEX_op_or_i64, ret, arg1, arg2);
                   1138:     }
1.1       root     1139: }
                   1140: 
                   1141: static inline void tcg_gen_ori_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
                   1142: {
                   1143:     TCGv_i64 t0 = tcg_const_i64(arg2);
                   1144:     tcg_gen_or_i64(ret, arg1, t0);
                   1145:     tcg_temp_free_i64(t0);
                   1146: }
                   1147: 
                   1148: static inline void tcg_gen_xor_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                   1149: {
1.1.1.2   root     1150:     if (TCGV_EQUAL_I64(arg1, arg2)) {
                   1151:         tcg_gen_movi_i64(ret, 0);
                   1152:     } else {
                   1153:         tcg_gen_op3_i64(INDEX_op_xor_i64, ret, arg1, arg2);
                   1154:     }
1.1       root     1155: }
                   1156: 
                   1157: static inline void tcg_gen_xori_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
                   1158: {
                   1159:     TCGv_i64 t0 = tcg_const_i64(arg2);
                   1160:     tcg_gen_xor_i64(ret, arg1, t0);
                   1161:     tcg_temp_free_i64(t0);
                   1162: }
                   1163: 
                   1164: static inline void tcg_gen_shl_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                   1165: {
                   1166:     tcg_gen_op3_i64(INDEX_op_shl_i64, ret, arg1, arg2);
                   1167: }
                   1168: 
                   1169: static inline void tcg_gen_shli_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
                   1170: {
                   1171:     if (arg2 == 0) {
                   1172:         tcg_gen_mov_i64(ret, arg1);
                   1173:     } else {
                   1174:         TCGv_i64 t0 = tcg_const_i64(arg2);
                   1175:         tcg_gen_shl_i64(ret, arg1, t0);
                   1176:         tcg_temp_free_i64(t0);
                   1177:     }
                   1178: }
                   1179: 
                   1180: static inline void tcg_gen_shr_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                   1181: {
                   1182:     tcg_gen_op3_i64(INDEX_op_shr_i64, ret, arg1, arg2);
                   1183: }
                   1184: 
                   1185: static inline void tcg_gen_shri_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
                   1186: {
                   1187:     if (arg2 == 0) {
                   1188:         tcg_gen_mov_i64(ret, arg1);
                   1189:     } else {
                   1190:         TCGv_i64 t0 = tcg_const_i64(arg2);
                   1191:         tcg_gen_shr_i64(ret, arg1, t0);
                   1192:         tcg_temp_free_i64(t0);
                   1193:     }
                   1194: }
                   1195: 
                   1196: static inline void tcg_gen_sar_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                   1197: {
                   1198:     tcg_gen_op3_i64(INDEX_op_sar_i64, ret, arg1, arg2);
                   1199: }
                   1200: 
                   1201: static inline void tcg_gen_sari_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
                   1202: {
                   1203:     if (arg2 == 0) {
                   1204:         tcg_gen_mov_i64(ret, arg1);
                   1205:     } else {
                   1206:         TCGv_i64 t0 = tcg_const_i64(arg2);
                   1207:         tcg_gen_sar_i64(ret, arg1, t0);
                   1208:         tcg_temp_free_i64(t0);
                   1209:     }
                   1210: }
                   1211: 
1.1.1.4 ! root     1212: static inline void tcg_gen_brcond_i64(TCGCond cond, TCGv_i64 arg1,
        !          1213:                                       TCGv_i64 arg2, int label_index)
1.1       root     1214: {
                   1215:     tcg_gen_op4ii_i64(INDEX_op_brcond_i64, arg1, arg2, cond, label_index);
                   1216: }
                   1217: 
1.1.1.4 ! root     1218: static inline void tcg_gen_setcond_i64(TCGCond cond, TCGv_i64 ret,
        !          1219:                                        TCGv_i64 arg1, TCGv_i64 arg2)
        !          1220: {
        !          1221:     tcg_gen_op4i_i64(INDEX_op_setcond_i64, ret, arg1, arg2, cond);
        !          1222: }
        !          1223: 
1.1       root     1224: static inline void tcg_gen_mul_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                   1225: {
                   1226:     tcg_gen_op3_i64(INDEX_op_mul_i64, ret, arg1, arg2);
                   1227: }
                   1228: 
                   1229: #ifdef TCG_TARGET_HAS_div_i64
                   1230: static inline void tcg_gen_div_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                   1231: {
                   1232:     tcg_gen_op3_i64(INDEX_op_div_i64, ret, arg1, arg2);
                   1233: }
                   1234: 
                   1235: static inline void tcg_gen_rem_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                   1236: {
                   1237:     tcg_gen_op3_i64(INDEX_op_rem_i64, ret, arg1, arg2);
                   1238: }
                   1239: 
                   1240: static inline void tcg_gen_divu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                   1241: {
                   1242:     tcg_gen_op3_i64(INDEX_op_divu_i64, ret, arg1, arg2);
                   1243: }
                   1244: 
                   1245: static inline void tcg_gen_remu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                   1246: {
                   1247:     tcg_gen_op3_i64(INDEX_op_remu_i64, ret, arg1, arg2);
                   1248: }
1.1.1.4 ! root     1249: #elif defined(TCG_TARGET_HAS_div2_i64)
1.1       root     1250: static inline void tcg_gen_div_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                   1251: {
                   1252:     TCGv_i64 t0;
                   1253:     t0 = tcg_temp_new_i64();
                   1254:     tcg_gen_sari_i64(t0, arg1, 63);
                   1255:     tcg_gen_op5_i64(INDEX_op_div2_i64, ret, t0, arg1, t0, arg2);
                   1256:     tcg_temp_free_i64(t0);
                   1257: }
                   1258: 
                   1259: static inline void tcg_gen_rem_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                   1260: {
                   1261:     TCGv_i64 t0;
                   1262:     t0 = tcg_temp_new_i64();
                   1263:     tcg_gen_sari_i64(t0, arg1, 63);
                   1264:     tcg_gen_op5_i64(INDEX_op_div2_i64, t0, ret, arg1, t0, arg2);
                   1265:     tcg_temp_free_i64(t0);
                   1266: }
                   1267: 
                   1268: static inline void tcg_gen_divu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                   1269: {
                   1270:     TCGv_i64 t0;
                   1271:     t0 = tcg_temp_new_i64();
                   1272:     tcg_gen_movi_i64(t0, 0);
                   1273:     tcg_gen_op5_i64(INDEX_op_divu2_i64, ret, t0, arg1, t0, arg2);
                   1274:     tcg_temp_free_i64(t0);
                   1275: }
                   1276: 
                   1277: static inline void tcg_gen_remu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                   1278: {
                   1279:     TCGv_i64 t0;
                   1280:     t0 = tcg_temp_new_i64();
                   1281:     tcg_gen_movi_i64(t0, 0);
                   1282:     tcg_gen_op5_i64(INDEX_op_divu2_i64, t0, ret, arg1, t0, arg2);
                   1283:     tcg_temp_free_i64(t0);
                   1284: }
1.1.1.4 ! root     1285: #else
        !          1286: static inline void tcg_gen_div_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
        !          1287: {
        !          1288:     int sizemask = 0;
        !          1289:     /* Return value and both arguments are 64-bit and signed.  */
        !          1290:     sizemask |= tcg_gen_sizemask(0, 1, 1);
        !          1291:     sizemask |= tcg_gen_sizemask(1, 1, 1);
        !          1292:     sizemask |= tcg_gen_sizemask(2, 1, 1);
        !          1293: 
        !          1294:     tcg_gen_helper64(tcg_helper_div_i64, sizemask, ret, arg1, arg2);
        !          1295: }
        !          1296: 
        !          1297: static inline void tcg_gen_rem_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
        !          1298: {
        !          1299:     int sizemask = 0;
        !          1300:     /* Return value and both arguments are 64-bit and signed.  */
        !          1301:     sizemask |= tcg_gen_sizemask(0, 1, 1);
        !          1302:     sizemask |= tcg_gen_sizemask(1, 1, 1);
        !          1303:     sizemask |= tcg_gen_sizemask(2, 1, 1);
        !          1304: 
        !          1305:     tcg_gen_helper64(tcg_helper_rem_i64, sizemask, ret, arg1, arg2);
        !          1306: }
        !          1307: 
        !          1308: static inline void tcg_gen_divu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
        !          1309: {
        !          1310:     int sizemask = 0;
        !          1311:     /* Return value and both arguments are 64-bit and unsigned.  */
        !          1312:     sizemask |= tcg_gen_sizemask(0, 1, 0);
        !          1313:     sizemask |= tcg_gen_sizemask(1, 1, 0);
        !          1314:     sizemask |= tcg_gen_sizemask(2, 1, 0);
        !          1315: 
        !          1316:     tcg_gen_helper64(tcg_helper_divu_i64, sizemask, ret, arg1, arg2);
        !          1317: }
        !          1318: 
        !          1319: static inline void tcg_gen_remu_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
        !          1320: {
        !          1321:     int sizemask = 0;
        !          1322:     /* Return value and both arguments are 64-bit and unsigned.  */
        !          1323:     sizemask |= tcg_gen_sizemask(0, 1, 0);
        !          1324:     sizemask |= tcg_gen_sizemask(1, 1, 0);
        !          1325:     sizemask |= tcg_gen_sizemask(2, 1, 0);
        !          1326: 
        !          1327:     tcg_gen_helper64(tcg_helper_remu_i64, sizemask, ret, arg1, arg2);
        !          1328: }
1.1       root     1329: #endif
                   1330: 
                   1331: #endif
                   1332: 
                   1333: static inline void tcg_gen_addi_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
                   1334: {
                   1335:     /* some cases can be optimized here */
                   1336:     if (arg2 == 0) {
                   1337:         tcg_gen_mov_i64(ret, arg1);
                   1338:     } else {
                   1339:         TCGv_i64 t0 = tcg_const_i64(arg2);
                   1340:         tcg_gen_add_i64(ret, arg1, t0);
                   1341:         tcg_temp_free_i64(t0);
                   1342:     }
                   1343: }
                   1344: 
                   1345: static inline void tcg_gen_subfi_i64(TCGv_i64 ret, int64_t arg1, TCGv_i64 arg2)
                   1346: {
                   1347:     TCGv_i64 t0 = tcg_const_i64(arg1);
                   1348:     tcg_gen_sub_i64(ret, t0, arg2);
                   1349:     tcg_temp_free_i64(t0);
                   1350: }
                   1351: 
                   1352: static inline void tcg_gen_subi_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
                   1353: {
                   1354:     /* some cases can be optimized here */
                   1355:     if (arg2 == 0) {
                   1356:         tcg_gen_mov_i64(ret, arg1);
                   1357:     } else {
                   1358:         TCGv_i64 t0 = tcg_const_i64(arg2);
                   1359:         tcg_gen_sub_i64(ret, arg1, t0);
                   1360:         tcg_temp_free_i64(t0);
                   1361:     }
                   1362: }
1.1.1.4 ! root     1363: static inline void tcg_gen_brcondi_i64(TCGCond cond, TCGv_i64 arg1,
        !          1364:                                        int64_t arg2, int label_index)
1.1       root     1365: {
                   1366:     TCGv_i64 t0 = tcg_const_i64(arg2);
                   1367:     tcg_gen_brcond_i64(cond, arg1, t0, label_index);
                   1368:     tcg_temp_free_i64(t0);
                   1369: }
                   1370: 
1.1.1.4 ! root     1371: static inline void tcg_gen_setcondi_i64(TCGCond cond, TCGv_i64 ret,
        !          1372:                                         TCGv_i64 arg1, int64_t arg2)
        !          1373: {
        !          1374:     TCGv_i64 t0 = tcg_const_i64(arg2);
        !          1375:     tcg_gen_setcond_i64(cond, ret, arg1, t0);
        !          1376:     tcg_temp_free_i64(t0);
        !          1377: }
        !          1378: 
1.1       root     1379: static inline void tcg_gen_muli_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
                   1380: {
                   1381:     TCGv_i64 t0 = tcg_const_i64(arg2);
                   1382:     tcg_gen_mul_i64(ret, arg1, t0);
                   1383:     tcg_temp_free_i64(t0);
                   1384: }
                   1385: 
                   1386: 
                   1387: /***************************************/
                   1388: /* optional operations */
                   1389: 
                   1390: static inline void tcg_gen_ext8s_i32(TCGv_i32 ret, TCGv_i32 arg)
                   1391: {
                   1392: #ifdef TCG_TARGET_HAS_ext8s_i32
                   1393:     tcg_gen_op2_i32(INDEX_op_ext8s_i32, ret, arg);
                   1394: #else
                   1395:     tcg_gen_shli_i32(ret, arg, 24);
                   1396:     tcg_gen_sari_i32(ret, ret, 24);
                   1397: #endif
                   1398: }
                   1399: 
                   1400: static inline void tcg_gen_ext16s_i32(TCGv_i32 ret, TCGv_i32 arg)
                   1401: {
                   1402: #ifdef TCG_TARGET_HAS_ext16s_i32
                   1403:     tcg_gen_op2_i32(INDEX_op_ext16s_i32, ret, arg);
                   1404: #else
                   1405:     tcg_gen_shli_i32(ret, arg, 16);
                   1406:     tcg_gen_sari_i32(ret, ret, 16);
                   1407: #endif
                   1408: }
                   1409: 
                   1410: static inline void tcg_gen_ext8u_i32(TCGv_i32 ret, TCGv_i32 arg)
                   1411: {
1.1.1.3   root     1412: #ifdef TCG_TARGET_HAS_ext8u_i32
                   1413:     tcg_gen_op2_i32(INDEX_op_ext8u_i32, ret, arg);
                   1414: #else
1.1       root     1415:     tcg_gen_andi_i32(ret, arg, 0xffu);
1.1.1.3   root     1416: #endif
1.1       root     1417: }
                   1418: 
                   1419: static inline void tcg_gen_ext16u_i32(TCGv_i32 ret, TCGv_i32 arg)
                   1420: {
1.1.1.3   root     1421: #ifdef TCG_TARGET_HAS_ext16u_i32
                   1422:     tcg_gen_op2_i32(INDEX_op_ext16u_i32, ret, arg);
                   1423: #else
1.1       root     1424:     tcg_gen_andi_i32(ret, arg, 0xffffu);
1.1.1.3   root     1425: #endif
1.1       root     1426: }
                   1427: 
                   1428: /* Note: we assume the two high bytes are set to zero */
                   1429: static inline void tcg_gen_bswap16_i32(TCGv_i32 ret, TCGv_i32 arg)
                   1430: {
                   1431: #ifdef TCG_TARGET_HAS_bswap16_i32
                   1432:     tcg_gen_op2_i32(INDEX_op_bswap16_i32, ret, arg);
                   1433: #else
1.1.1.2   root     1434:     TCGv_i32 t0 = tcg_temp_new_i32();
1.1       root     1435:     
1.1.1.2   root     1436:     tcg_gen_ext8u_i32(t0, arg);
                   1437:     tcg_gen_shli_i32(t0, t0, 8);
                   1438:     tcg_gen_shri_i32(ret, arg, 8);
                   1439:     tcg_gen_or_i32(ret, ret, t0);
1.1       root     1440:     tcg_temp_free_i32(t0);
                   1441: #endif
                   1442: }
                   1443: 
1.1.1.2   root     1444: static inline void tcg_gen_bswap32_i32(TCGv_i32 ret, TCGv_i32 arg)
1.1       root     1445: {
1.1.1.2   root     1446: #ifdef TCG_TARGET_HAS_bswap32_i32
                   1447:     tcg_gen_op2_i32(INDEX_op_bswap32_i32, ret, arg);
1.1       root     1448: #else
                   1449:     TCGv_i32 t0, t1;
                   1450:     t0 = tcg_temp_new_i32();
                   1451:     t1 = tcg_temp_new_i32();
                   1452:     
                   1453:     tcg_gen_shli_i32(t0, arg, 24);
                   1454:     
                   1455:     tcg_gen_andi_i32(t1, arg, 0x0000ff00);
                   1456:     tcg_gen_shli_i32(t1, t1, 8);
                   1457:     tcg_gen_or_i32(t0, t0, t1);
                   1458:     
                   1459:     tcg_gen_shri_i32(t1, arg, 8);
                   1460:     tcg_gen_andi_i32(t1, t1, 0x0000ff00);
                   1461:     tcg_gen_or_i32(t0, t0, t1);
                   1462:     
                   1463:     tcg_gen_shri_i32(t1, arg, 24);
                   1464:     tcg_gen_or_i32(ret, t0, t1);
                   1465:     tcg_temp_free_i32(t0);
                   1466:     tcg_temp_free_i32(t1);
                   1467: #endif
                   1468: }
                   1469: 
                   1470: #if TCG_TARGET_REG_BITS == 32
                   1471: static inline void tcg_gen_ext8s_i64(TCGv_i64 ret, TCGv_i64 arg)
                   1472: {
                   1473:     tcg_gen_ext8s_i32(TCGV_LOW(ret), TCGV_LOW(arg));
                   1474:     tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
                   1475: }
                   1476: 
                   1477: static inline void tcg_gen_ext16s_i64(TCGv_i64 ret, TCGv_i64 arg)
                   1478: {
                   1479:     tcg_gen_ext16s_i32(TCGV_LOW(ret), TCGV_LOW(arg));
                   1480:     tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
                   1481: }
                   1482: 
                   1483: static inline void tcg_gen_ext32s_i64(TCGv_i64 ret, TCGv_i64 arg)
                   1484: {
                   1485:     tcg_gen_mov_i32(TCGV_LOW(ret), TCGV_LOW(arg));
                   1486:     tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
                   1487: }
                   1488: 
                   1489: static inline void tcg_gen_ext8u_i64(TCGv_i64 ret, TCGv_i64 arg)
                   1490: {
                   1491:     tcg_gen_ext8u_i32(TCGV_LOW(ret), TCGV_LOW(arg));
                   1492:     tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
                   1493: }
                   1494: 
                   1495: static inline void tcg_gen_ext16u_i64(TCGv_i64 ret, TCGv_i64 arg)
                   1496: {
                   1497:     tcg_gen_ext16u_i32(TCGV_LOW(ret), TCGV_LOW(arg));
                   1498:     tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
                   1499: }
                   1500: 
                   1501: static inline void tcg_gen_ext32u_i64(TCGv_i64 ret, TCGv_i64 arg)
                   1502: {
                   1503:     tcg_gen_mov_i32(TCGV_LOW(ret), TCGV_LOW(arg));
                   1504:     tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
                   1505: }
                   1506: 
                   1507: static inline void tcg_gen_trunc_i64_i32(TCGv_i32 ret, TCGv_i64 arg)
                   1508: {
                   1509:     tcg_gen_mov_i32(ret, TCGV_LOW(arg));
                   1510: }
                   1511: 
                   1512: static inline void tcg_gen_extu_i32_i64(TCGv_i64 ret, TCGv_i32 arg)
                   1513: {
                   1514:     tcg_gen_mov_i32(TCGV_LOW(ret), arg);
                   1515:     tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
                   1516: }
                   1517: 
                   1518: static inline void tcg_gen_ext_i32_i64(TCGv_i64 ret, TCGv_i32 arg)
                   1519: {
                   1520:     tcg_gen_mov_i32(TCGV_LOW(ret), arg);
                   1521:     tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
                   1522: }
                   1523: 
1.1.1.2   root     1524: /* Note: we assume the six high bytes are set to zero */
                   1525: static inline void tcg_gen_bswap16_i64(TCGv_i64 ret, TCGv_i64 arg)
                   1526: {
                   1527:     tcg_gen_mov_i32(TCGV_HIGH(ret), TCGV_HIGH(arg));
                   1528:     tcg_gen_bswap16_i32(TCGV_LOW(ret), TCGV_LOW(arg));
                   1529: }
                   1530: 
                   1531: /* Note: we assume the four high bytes are set to zero */
                   1532: static inline void tcg_gen_bswap32_i64(TCGv_i64 ret, TCGv_i64 arg)
                   1533: {
                   1534:     tcg_gen_mov_i32(TCGV_HIGH(ret), TCGV_HIGH(arg));
                   1535:     tcg_gen_bswap32_i32(TCGV_LOW(ret), TCGV_LOW(arg));
                   1536: }
                   1537: 
                   1538: static inline void tcg_gen_bswap64_i64(TCGv_i64 ret, TCGv_i64 arg)
1.1       root     1539: {
                   1540:     TCGv_i32 t0, t1;
                   1541:     t0 = tcg_temp_new_i32();
                   1542:     t1 = tcg_temp_new_i32();
                   1543: 
1.1.1.2   root     1544:     tcg_gen_bswap32_i32(t0, TCGV_LOW(arg));
                   1545:     tcg_gen_bswap32_i32(t1, TCGV_HIGH(arg));
1.1       root     1546:     tcg_gen_mov_i32(TCGV_LOW(ret), t1);
                   1547:     tcg_gen_mov_i32(TCGV_HIGH(ret), t0);
                   1548:     tcg_temp_free_i32(t0);
                   1549:     tcg_temp_free_i32(t1);
                   1550: }
                   1551: #else
                   1552: 
                   1553: static inline void tcg_gen_ext8s_i64(TCGv_i64 ret, TCGv_i64 arg)
                   1554: {
                   1555: #ifdef TCG_TARGET_HAS_ext8s_i64
                   1556:     tcg_gen_op2_i64(INDEX_op_ext8s_i64, ret, arg);
                   1557: #else
                   1558:     tcg_gen_shli_i64(ret, arg, 56);
                   1559:     tcg_gen_sari_i64(ret, ret, 56);
                   1560: #endif
                   1561: }
                   1562: 
                   1563: static inline void tcg_gen_ext16s_i64(TCGv_i64 ret, TCGv_i64 arg)
                   1564: {
                   1565: #ifdef TCG_TARGET_HAS_ext16s_i64
                   1566:     tcg_gen_op2_i64(INDEX_op_ext16s_i64, ret, arg);
                   1567: #else
                   1568:     tcg_gen_shli_i64(ret, arg, 48);
                   1569:     tcg_gen_sari_i64(ret, ret, 48);
                   1570: #endif
                   1571: }
                   1572: 
                   1573: static inline void tcg_gen_ext32s_i64(TCGv_i64 ret, TCGv_i64 arg)
                   1574: {
                   1575: #ifdef TCG_TARGET_HAS_ext32s_i64
                   1576:     tcg_gen_op2_i64(INDEX_op_ext32s_i64, ret, arg);
                   1577: #else
                   1578:     tcg_gen_shli_i64(ret, arg, 32);
                   1579:     tcg_gen_sari_i64(ret, ret, 32);
                   1580: #endif
                   1581: }
                   1582: 
                   1583: static inline void tcg_gen_ext8u_i64(TCGv_i64 ret, TCGv_i64 arg)
                   1584: {
1.1.1.3   root     1585: #ifdef TCG_TARGET_HAS_ext8u_i64
                   1586:     tcg_gen_op2_i64(INDEX_op_ext8u_i64, ret, arg);
                   1587: #else
1.1       root     1588:     tcg_gen_andi_i64(ret, arg, 0xffu);
1.1.1.3   root     1589: #endif
1.1       root     1590: }
                   1591: 
                   1592: static inline void tcg_gen_ext16u_i64(TCGv_i64 ret, TCGv_i64 arg)
                   1593: {
1.1.1.3   root     1594: #ifdef TCG_TARGET_HAS_ext16u_i64
                   1595:     tcg_gen_op2_i64(INDEX_op_ext16u_i64, ret, arg);
                   1596: #else
1.1       root     1597:     tcg_gen_andi_i64(ret, arg, 0xffffu);
1.1.1.3   root     1598: #endif
1.1       root     1599: }
                   1600: 
                   1601: static inline void tcg_gen_ext32u_i64(TCGv_i64 ret, TCGv_i64 arg)
                   1602: {
1.1.1.3   root     1603: #ifdef TCG_TARGET_HAS_ext32u_i64
                   1604:     tcg_gen_op2_i64(INDEX_op_ext32u_i64, ret, arg);
                   1605: #else
1.1       root     1606:     tcg_gen_andi_i64(ret, arg, 0xffffffffu);
1.1.1.3   root     1607: #endif
1.1       root     1608: }
                   1609: 
                   1610: /* Note: we assume the target supports move between 32 and 64 bit
                   1611:    registers.  This will probably break MIPS64 targets.  */
                   1612: static inline void tcg_gen_trunc_i64_i32(TCGv_i32 ret, TCGv_i64 arg)
                   1613: {
                   1614:     tcg_gen_mov_i32(ret, MAKE_TCGV_I32(GET_TCGV_I64(arg)));
                   1615: }
                   1616: 
                   1617: /* Note: we assume the target supports move between 32 and 64 bit
                   1618:    registers */
                   1619: static inline void tcg_gen_extu_i32_i64(TCGv_i64 ret, TCGv_i32 arg)
                   1620: {
1.1.1.3   root     1621:     tcg_gen_ext32u_i64(ret, MAKE_TCGV_I64(GET_TCGV_I32(arg)));
1.1       root     1622: }
                   1623: 
                   1624: /* Note: we assume the target supports move between 32 and 64 bit
                   1625:    registers */
                   1626: static inline void tcg_gen_ext_i32_i64(TCGv_i64 ret, TCGv_i32 arg)
                   1627: {
                   1628:     tcg_gen_ext32s_i64(ret, MAKE_TCGV_I64(GET_TCGV_I32(arg)));
                   1629: }
                   1630: 
1.1.1.2   root     1631: /* Note: we assume the six high bytes are set to zero */
                   1632: static inline void tcg_gen_bswap16_i64(TCGv_i64 ret, TCGv_i64 arg)
1.1       root     1633: {
1.1.1.2   root     1634: #ifdef TCG_TARGET_HAS_bswap16_i64
                   1635:     tcg_gen_op2_i64(INDEX_op_bswap16_i64, ret, arg);
1.1       root     1636: #else
1.1.1.2   root     1637:     TCGv_i64 t0 = tcg_temp_new_i64();
                   1638: 
                   1639:     tcg_gen_ext8u_i64(t0, arg);
                   1640:     tcg_gen_shli_i64(t0, t0, 8);
                   1641:     tcg_gen_shri_i64(ret, arg, 8);
                   1642:     tcg_gen_or_i64(ret, ret, t0);
                   1643:     tcg_temp_free_i64(t0);
                   1644: #endif
                   1645: }
                   1646: 
                   1647: /* Note: we assume the four high bytes are set to zero */
                   1648: static inline void tcg_gen_bswap32_i64(TCGv_i64 ret, TCGv_i64 arg)
                   1649: {
                   1650: #ifdef TCG_TARGET_HAS_bswap32_i64
                   1651:     tcg_gen_op2_i64(INDEX_op_bswap32_i64, ret, arg);
                   1652: #else
                   1653:     TCGv_i64 t0, t1;
                   1654:     t0 = tcg_temp_new_i64();
                   1655:     t1 = tcg_temp_new_i64();
                   1656: 
                   1657:     tcg_gen_shli_i64(t0, arg, 24);
                   1658:     tcg_gen_ext32u_i64(t0, t0);
                   1659: 
                   1660:     tcg_gen_andi_i64(t1, arg, 0x0000ff00);
                   1661:     tcg_gen_shli_i64(t1, t1, 8);
                   1662:     tcg_gen_or_i64(t0, t0, t1);
                   1663: 
                   1664:     tcg_gen_shri_i64(t1, arg, 8);
                   1665:     tcg_gen_andi_i64(t1, t1, 0x0000ff00);
                   1666:     tcg_gen_or_i64(t0, t0, t1);
                   1667: 
                   1668:     tcg_gen_shri_i64(t1, arg, 24);
                   1669:     tcg_gen_or_i64(ret, t0, t1);
                   1670:     tcg_temp_free_i64(t0);
                   1671:     tcg_temp_free_i64(t1);
                   1672: #endif
                   1673: }
                   1674: 
                   1675: static inline void tcg_gen_bswap64_i64(TCGv_i64 ret, TCGv_i64 arg)
                   1676: {
                   1677: #ifdef TCG_TARGET_HAS_bswap64_i64
                   1678:     tcg_gen_op2_i64(INDEX_op_bswap64_i64, ret, arg);
                   1679: #else
                   1680:     TCGv_i64 t0 = tcg_temp_new_i64();
                   1681:     TCGv_i64 t1 = tcg_temp_new_i64();
1.1       root     1682:     
                   1683:     tcg_gen_shli_i64(t0, arg, 56);
                   1684:     
                   1685:     tcg_gen_andi_i64(t1, arg, 0x0000ff00);
                   1686:     tcg_gen_shli_i64(t1, t1, 40);
                   1687:     tcg_gen_or_i64(t0, t0, t1);
                   1688:     
                   1689:     tcg_gen_andi_i64(t1, arg, 0x00ff0000);
                   1690:     tcg_gen_shli_i64(t1, t1, 24);
                   1691:     tcg_gen_or_i64(t0, t0, t1);
                   1692: 
                   1693:     tcg_gen_andi_i64(t1, arg, 0xff000000);
                   1694:     tcg_gen_shli_i64(t1, t1, 8);
                   1695:     tcg_gen_or_i64(t0, t0, t1);
                   1696: 
                   1697:     tcg_gen_shri_i64(t1, arg, 8);
                   1698:     tcg_gen_andi_i64(t1, t1, 0xff000000);
                   1699:     tcg_gen_or_i64(t0, t0, t1);
                   1700:     
                   1701:     tcg_gen_shri_i64(t1, arg, 24);
                   1702:     tcg_gen_andi_i64(t1, t1, 0x00ff0000);
                   1703:     tcg_gen_or_i64(t0, t0, t1);
                   1704: 
                   1705:     tcg_gen_shri_i64(t1, arg, 40);
                   1706:     tcg_gen_andi_i64(t1, t1, 0x0000ff00);
                   1707:     tcg_gen_or_i64(t0, t0, t1);
                   1708: 
                   1709:     tcg_gen_shri_i64(t1, arg, 56);
                   1710:     tcg_gen_or_i64(ret, t0, t1);
1.1.1.2   root     1711:     tcg_temp_free_i64(t0);
                   1712:     tcg_temp_free_i64(t1);
1.1       root     1713: #endif
                   1714: }
                   1715: 
                   1716: #endif
                   1717: 
                   1718: static inline void tcg_gen_neg_i32(TCGv_i32 ret, TCGv_i32 arg)
                   1719: {
                   1720: #ifdef TCG_TARGET_HAS_neg_i32
                   1721:     tcg_gen_op2_i32(INDEX_op_neg_i32, ret, arg);
                   1722: #else
                   1723:     TCGv_i32 t0 = tcg_const_i32(0);
                   1724:     tcg_gen_sub_i32(ret, t0, arg);
                   1725:     tcg_temp_free_i32(t0);
                   1726: #endif
                   1727: }
                   1728: 
                   1729: static inline void tcg_gen_neg_i64(TCGv_i64 ret, TCGv_i64 arg)
                   1730: {
                   1731: #ifdef TCG_TARGET_HAS_neg_i64
                   1732:     tcg_gen_op2_i64(INDEX_op_neg_i64, ret, arg);
                   1733: #else
                   1734:     TCGv_i64 t0 = tcg_const_i64(0);
                   1735:     tcg_gen_sub_i64(ret, t0, arg);
                   1736:     tcg_temp_free_i64(t0);
                   1737: #endif
                   1738: }
                   1739: 
                   1740: static inline void tcg_gen_not_i32(TCGv_i32 ret, TCGv_i32 arg)
                   1741: {
1.1.1.2   root     1742: #ifdef TCG_TARGET_HAS_not_i32
                   1743:     tcg_gen_op2_i32(INDEX_op_not_i32, ret, arg);
                   1744: #else
1.1       root     1745:     tcg_gen_xori_i32(ret, arg, -1);
1.1.1.2   root     1746: #endif
1.1       root     1747: }
                   1748: 
                   1749: static inline void tcg_gen_not_i64(TCGv_i64 ret, TCGv_i64 arg)
                   1750: {
1.1.1.2   root     1751: #ifdef TCG_TARGET_HAS_not_i64
                   1752:     tcg_gen_op2_i64(INDEX_op_not_i64, ret, arg);
1.1.1.4 ! root     1753: #elif defined(TCG_TARGET_HAS_not_i32) && TCG_TARGET_REG_BITS == 32
        !          1754:     tcg_gen_not_i32(TCGV_LOW(ret), TCGV_LOW(arg));
        !          1755:     tcg_gen_not_i32(TCGV_HIGH(ret), TCGV_HIGH(arg));
1.1.1.2   root     1756: #else
1.1       root     1757:     tcg_gen_xori_i64(ret, arg, -1);
1.1.1.2   root     1758: #endif
1.1       root     1759: }
                   1760: 
                   1761: static inline void tcg_gen_discard_i32(TCGv_i32 arg)
                   1762: {
                   1763:     tcg_gen_op1_i32(INDEX_op_discard, arg);
                   1764: }
                   1765: 
                   1766: #if TCG_TARGET_REG_BITS == 32
                   1767: static inline void tcg_gen_discard_i64(TCGv_i64 arg)
                   1768: {
                   1769:     tcg_gen_discard_i32(TCGV_LOW(arg));
                   1770:     tcg_gen_discard_i32(TCGV_HIGH(arg));
                   1771: }
                   1772: #else
                   1773: static inline void tcg_gen_discard_i64(TCGv_i64 arg)
                   1774: {
                   1775:     tcg_gen_op1_i64(INDEX_op_discard, arg);
                   1776: }
                   1777: #endif
                   1778: 
                   1779: static inline void tcg_gen_concat_i32_i64(TCGv_i64 dest, TCGv_i32 low, TCGv_i32 high)
                   1780: {
                   1781: #if TCG_TARGET_REG_BITS == 32
                   1782:     tcg_gen_mov_i32(TCGV_LOW(dest), low);
                   1783:     tcg_gen_mov_i32(TCGV_HIGH(dest), high);
                   1784: #else
                   1785:     TCGv_i64 tmp = tcg_temp_new_i64();
                   1786:     /* This extension is only needed for type correctness.
                   1787:        We may be able to do better given target specific information.  */
                   1788:     tcg_gen_extu_i32_i64(tmp, high);
                   1789:     tcg_gen_shli_i64(tmp, tmp, 32);
                   1790:     tcg_gen_extu_i32_i64(dest, low);
                   1791:     tcg_gen_or_i64(dest, dest, tmp);
                   1792:     tcg_temp_free_i64(tmp);
                   1793: #endif
                   1794: }
                   1795: 
                   1796: static inline void tcg_gen_concat32_i64(TCGv_i64 dest, TCGv_i64 low, TCGv_i64 high)
                   1797: {
                   1798: #if TCG_TARGET_REG_BITS == 32
                   1799:     tcg_gen_concat_i32_i64(dest, TCGV_LOW(low), TCGV_LOW(high));
                   1800: #else
                   1801:     TCGv_i64 tmp = tcg_temp_new_i64();
                   1802:     tcg_gen_ext32u_i64(dest, low);
                   1803:     tcg_gen_shli_i64(tmp, high, 32);
                   1804:     tcg_gen_or_i64(dest, dest, tmp);
                   1805:     tcg_temp_free_i64(tmp);
                   1806: #endif
                   1807: }
                   1808: 
                   1809: static inline void tcg_gen_andc_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
                   1810: {
1.1.1.4 ! root     1811: #ifdef TCG_TARGET_HAS_andc_i32
        !          1812:     tcg_gen_op3_i32(INDEX_op_andc_i32, ret, arg1, arg2);
        !          1813: #else
1.1       root     1814:     TCGv_i32 t0;
                   1815:     t0 = tcg_temp_new_i32();
                   1816:     tcg_gen_not_i32(t0, arg2);
                   1817:     tcg_gen_and_i32(ret, arg1, t0);
                   1818:     tcg_temp_free_i32(t0);
1.1.1.4 ! root     1819: #endif
1.1       root     1820: }
                   1821: 
                   1822: static inline void tcg_gen_andc_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                   1823: {
1.1.1.4 ! root     1824: #ifdef TCG_TARGET_HAS_andc_i64
        !          1825:     tcg_gen_op3_i64(INDEX_op_andc_i64, ret, arg1, arg2);
        !          1826: #elif defined(TCG_TARGET_HAS_andc_i32) && TCG_TARGET_REG_BITS == 32
        !          1827:     tcg_gen_andc_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2));
        !          1828:     tcg_gen_andc_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2));
        !          1829: #else
1.1       root     1830:     TCGv_i64 t0;
                   1831:     t0 = tcg_temp_new_i64();
                   1832:     tcg_gen_not_i64(t0, arg2);
                   1833:     tcg_gen_and_i64(ret, arg1, t0);
                   1834:     tcg_temp_free_i64(t0);
1.1.1.4 ! root     1835: #endif
1.1       root     1836: }
                   1837: 
                   1838: static inline void tcg_gen_eqv_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
                   1839: {
1.1.1.4 ! root     1840: #ifdef TCG_TARGET_HAS_eqv_i32
        !          1841:     tcg_gen_op3_i32(INDEX_op_eqv_i32, ret, arg1, arg2);
        !          1842: #else
1.1.1.2   root     1843:     tcg_gen_xor_i32(ret, arg1, arg2);
                   1844:     tcg_gen_not_i32(ret, ret);
1.1.1.4 ! root     1845: #endif
1.1       root     1846: }
                   1847: 
                   1848: static inline void tcg_gen_eqv_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                   1849: {
1.1.1.4 ! root     1850: #ifdef TCG_TARGET_HAS_eqv_i64
        !          1851:     tcg_gen_op3_i64(INDEX_op_eqv_i64, ret, arg1, arg2);
        !          1852: #elif defined(TCG_TARGET_HAS_eqv_i32) && TCG_TARGET_REG_BITS == 32
        !          1853:     tcg_gen_eqv_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2));
        !          1854:     tcg_gen_eqv_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2));
        !          1855: #else
1.1.1.2   root     1856:     tcg_gen_xor_i64(ret, arg1, arg2);
                   1857:     tcg_gen_not_i64(ret, ret);
1.1.1.4 ! root     1858: #endif
1.1       root     1859: }
                   1860: 
                   1861: static inline void tcg_gen_nand_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
                   1862: {
1.1.1.4 ! root     1863: #ifdef TCG_TARGET_HAS_nand_i32
        !          1864:     tcg_gen_op3_i32(INDEX_op_nand_i32, ret, arg1, arg2);
        !          1865: #else
1.1.1.2   root     1866:     tcg_gen_and_i32(ret, arg1, arg2);
                   1867:     tcg_gen_not_i32(ret, ret);
1.1.1.4 ! root     1868: #endif
1.1       root     1869: }
                   1870: 
                   1871: static inline void tcg_gen_nand_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                   1872: {
1.1.1.4 ! root     1873: #ifdef TCG_TARGET_HAS_nand_i64
        !          1874:     tcg_gen_op3_i64(INDEX_op_nand_i64, ret, arg1, arg2);
        !          1875: #elif defined(TCG_TARGET_HAS_nand_i32) && TCG_TARGET_REG_BITS == 32
        !          1876:     tcg_gen_nand_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2));
        !          1877:     tcg_gen_nand_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2));
        !          1878: #else
1.1.1.2   root     1879:     tcg_gen_and_i64(ret, arg1, arg2);
                   1880:     tcg_gen_not_i64(ret, ret);
1.1.1.4 ! root     1881: #endif
1.1       root     1882: }
                   1883: 
                   1884: static inline void tcg_gen_nor_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
                   1885: {
1.1.1.4 ! root     1886: #ifdef TCG_TARGET_HAS_nor_i32
        !          1887:     tcg_gen_op3_i32(INDEX_op_nor_i32, ret, arg1, arg2);
        !          1888: #else
1.1.1.2   root     1889:     tcg_gen_or_i32(ret, arg1, arg2);
                   1890:     tcg_gen_not_i32(ret, ret);
1.1.1.4 ! root     1891: #endif
1.1       root     1892: }
                   1893: 
                   1894: static inline void tcg_gen_nor_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                   1895: {
1.1.1.4 ! root     1896: #ifdef TCG_TARGET_HAS_nor_i64
        !          1897:     tcg_gen_op3_i64(INDEX_op_nor_i64, ret, arg1, arg2);
        !          1898: #elif defined(TCG_TARGET_HAS_nor_i32) && TCG_TARGET_REG_BITS == 32
        !          1899:     tcg_gen_nor_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2));
        !          1900:     tcg_gen_nor_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2));
        !          1901: #else
1.1.1.2   root     1902:     tcg_gen_or_i64(ret, arg1, arg2);
                   1903:     tcg_gen_not_i64(ret, ret);
1.1.1.4 ! root     1904: #endif
1.1       root     1905: }
                   1906: 
                   1907: static inline void tcg_gen_orc_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
                   1908: {
1.1.1.4 ! root     1909: #ifdef TCG_TARGET_HAS_orc_i32
        !          1910:     tcg_gen_op3_i32(INDEX_op_orc_i32, ret, arg1, arg2);
        !          1911: #else
1.1       root     1912:     TCGv_i32 t0;
                   1913:     t0 = tcg_temp_new_i32();
                   1914:     tcg_gen_not_i32(t0, arg2);
                   1915:     tcg_gen_or_i32(ret, arg1, t0);
                   1916:     tcg_temp_free_i32(t0);
1.1.1.4 ! root     1917: #endif
1.1       root     1918: }
                   1919: 
                   1920: static inline void tcg_gen_orc_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                   1921: {
1.1.1.4 ! root     1922: #ifdef TCG_TARGET_HAS_orc_i64
        !          1923:     tcg_gen_op3_i64(INDEX_op_orc_i64, ret, arg1, arg2);
        !          1924: #elif defined(TCG_TARGET_HAS_orc_i32) && TCG_TARGET_REG_BITS == 32
        !          1925:     tcg_gen_orc_i32(TCGV_LOW(ret), TCGV_LOW(arg1), TCGV_LOW(arg2));
        !          1926:     tcg_gen_orc_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), TCGV_HIGH(arg2));
        !          1927: #else
1.1       root     1928:     TCGv_i64 t0;
                   1929:     t0 = tcg_temp_new_i64();
                   1930:     tcg_gen_not_i64(t0, arg2);
                   1931:     tcg_gen_or_i64(ret, arg1, t0);
                   1932:     tcg_temp_free_i64(t0);
1.1.1.4 ! root     1933: #endif
1.1       root     1934: }
                   1935: 
                   1936: static inline void tcg_gen_rotl_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
                   1937: {
1.1.1.2   root     1938: #ifdef TCG_TARGET_HAS_rot_i32
                   1939:     tcg_gen_op3_i32(INDEX_op_rotl_i32, ret, arg1, arg2);
                   1940: #else
1.1       root     1941:     TCGv_i32 t0, t1;
                   1942: 
                   1943:     t0 = tcg_temp_new_i32();
                   1944:     t1 = tcg_temp_new_i32();
                   1945:     tcg_gen_shl_i32(t0, arg1, arg2);
                   1946:     tcg_gen_subfi_i32(t1, 32, arg2);
                   1947:     tcg_gen_shr_i32(t1, arg1, t1);
                   1948:     tcg_gen_or_i32(ret, t0, t1);
                   1949:     tcg_temp_free_i32(t0);
                   1950:     tcg_temp_free_i32(t1);
1.1.1.2   root     1951: #endif
1.1       root     1952: }
                   1953: 
                   1954: static inline void tcg_gen_rotl_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                   1955: {
1.1.1.2   root     1956: #ifdef TCG_TARGET_HAS_rot_i64
                   1957:     tcg_gen_op3_i64(INDEX_op_rotl_i64, ret, arg1, arg2);
                   1958: #else
1.1       root     1959:     TCGv_i64 t0, t1;
                   1960: 
                   1961:     t0 = tcg_temp_new_i64();
                   1962:     t1 = tcg_temp_new_i64();
                   1963:     tcg_gen_shl_i64(t0, arg1, arg2);
                   1964:     tcg_gen_subfi_i64(t1, 64, arg2);
                   1965:     tcg_gen_shr_i64(t1, arg1, t1);
                   1966:     tcg_gen_or_i64(ret, t0, t1);
                   1967:     tcg_temp_free_i64(t0);
                   1968:     tcg_temp_free_i64(t1);
1.1.1.2   root     1969: #endif
1.1       root     1970: }
                   1971: 
                   1972: static inline void tcg_gen_rotli_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
                   1973: {
                   1974:     /* some cases can be optimized here */
                   1975:     if (arg2 == 0) {
                   1976:         tcg_gen_mov_i32(ret, arg1);
                   1977:     } else {
1.1.1.2   root     1978: #ifdef TCG_TARGET_HAS_rot_i32
                   1979:         TCGv_i32 t0 = tcg_const_i32(arg2);
                   1980:         tcg_gen_rotl_i32(ret, arg1, t0);
                   1981:         tcg_temp_free_i32(t0);
                   1982: #else
1.1       root     1983:         TCGv_i32 t0, t1;
                   1984:         t0 = tcg_temp_new_i32();
                   1985:         t1 = tcg_temp_new_i32();
                   1986:         tcg_gen_shli_i32(t0, arg1, arg2);
                   1987:         tcg_gen_shri_i32(t1, arg1, 32 - arg2);
                   1988:         tcg_gen_or_i32(ret, t0, t1);
                   1989:         tcg_temp_free_i32(t0);
                   1990:         tcg_temp_free_i32(t1);
1.1.1.2   root     1991: #endif
1.1       root     1992:     }
                   1993: }
                   1994: 
                   1995: static inline void tcg_gen_rotli_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
                   1996: {
                   1997:     /* some cases can be optimized here */
                   1998:     if (arg2 == 0) {
                   1999:         tcg_gen_mov_i64(ret, arg1);
                   2000:     } else {
1.1.1.2   root     2001: #ifdef TCG_TARGET_HAS_rot_i64
                   2002:         TCGv_i64 t0 = tcg_const_i64(arg2);
                   2003:         tcg_gen_rotl_i64(ret, arg1, t0);
                   2004:         tcg_temp_free_i64(t0);
                   2005: #else
1.1       root     2006:         TCGv_i64 t0, t1;
                   2007:         t0 = tcg_temp_new_i64();
                   2008:         t1 = tcg_temp_new_i64();
                   2009:         tcg_gen_shli_i64(t0, arg1, arg2);
                   2010:         tcg_gen_shri_i64(t1, arg1, 64 - arg2);
                   2011:         tcg_gen_or_i64(ret, t0, t1);
                   2012:         tcg_temp_free_i64(t0);
                   2013:         tcg_temp_free_i64(t1);
1.1.1.2   root     2014: #endif
1.1       root     2015:     }
                   2016: }
                   2017: 
                   2018: static inline void tcg_gen_rotr_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
                   2019: {
1.1.1.2   root     2020: #ifdef TCG_TARGET_HAS_rot_i32
                   2021:     tcg_gen_op3_i32(INDEX_op_rotr_i32, ret, arg1, arg2);
                   2022: #else
1.1       root     2023:     TCGv_i32 t0, t1;
                   2024: 
                   2025:     t0 = tcg_temp_new_i32();
                   2026:     t1 = tcg_temp_new_i32();
                   2027:     tcg_gen_shr_i32(t0, arg1, arg2);
                   2028:     tcg_gen_subfi_i32(t1, 32, arg2);
                   2029:     tcg_gen_shl_i32(t1, arg1, t1);
                   2030:     tcg_gen_or_i32(ret, t0, t1);
                   2031:     tcg_temp_free_i32(t0);
                   2032:     tcg_temp_free_i32(t1);
1.1.1.2   root     2033: #endif
1.1       root     2034: }
                   2035: 
                   2036: static inline void tcg_gen_rotr_i64(TCGv_i64 ret, TCGv_i64 arg1, TCGv_i64 arg2)
                   2037: {
1.1.1.2   root     2038: #ifdef TCG_TARGET_HAS_rot_i64
                   2039:     tcg_gen_op3_i64(INDEX_op_rotr_i64, ret, arg1, arg2);
                   2040: #else
1.1       root     2041:     TCGv_i64 t0, t1;
                   2042: 
                   2043:     t0 = tcg_temp_new_i64();
                   2044:     t1 = tcg_temp_new_i64();
1.1.1.2   root     2045:     tcg_gen_shr_i64(t0, arg1, arg2);
1.1       root     2046:     tcg_gen_subfi_i64(t1, 64, arg2);
                   2047:     tcg_gen_shl_i64(t1, arg1, t1);
                   2048:     tcg_gen_or_i64(ret, t0, t1);
                   2049:     tcg_temp_free_i64(t0);
                   2050:     tcg_temp_free_i64(t1);
1.1.1.2   root     2051: #endif
1.1       root     2052: }
                   2053: 
                   2054: static inline void tcg_gen_rotri_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2)
                   2055: {
                   2056:     /* some cases can be optimized here */
                   2057:     if (arg2 == 0) {
                   2058:         tcg_gen_mov_i32(ret, arg1);
                   2059:     } else {
                   2060:         tcg_gen_rotli_i32(ret, arg1, 32 - arg2);
                   2061:     }
                   2062: }
                   2063: 
                   2064: static inline void tcg_gen_rotri_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2)
                   2065: {
                   2066:     /* some cases can be optimized here */
                   2067:     if (arg2 == 0) {
                   2068:         tcg_gen_mov_i64(ret, arg1);
                   2069:     } else {
                   2070:         tcg_gen_rotli_i64(ret, arg1, 64 - arg2);
                   2071:     }
                   2072: }
                   2073: 
                   2074: /***************************************/
                   2075: /* QEMU specific operations. Their type depend on the QEMU CPU
                   2076:    type. */
                   2077: #ifndef TARGET_LONG_BITS
                   2078: #error must include QEMU headers
                   2079: #endif
                   2080: 
                   2081: #if TARGET_LONG_BITS == 32
                   2082: #define TCGv TCGv_i32
                   2083: #define tcg_temp_new() tcg_temp_new_i32()
                   2084: #define tcg_global_reg_new tcg_global_reg_new_i32
                   2085: #define tcg_global_mem_new tcg_global_mem_new_i32
                   2086: #define tcg_temp_local_new() tcg_temp_local_new_i32()
                   2087: #define tcg_temp_free tcg_temp_free_i32
                   2088: #define tcg_gen_qemu_ldst_op tcg_gen_op3i_i32
                   2089: #define tcg_gen_qemu_ldst_op_i64 tcg_gen_qemu_ldst_op_i64_i32
                   2090: #define TCGV_UNUSED(x) TCGV_UNUSED_I32(x)
1.1.1.2   root     2091: #define TCGV_EQUAL(a, b) TCGV_EQUAL_I32(a, b)
1.1       root     2092: #else
                   2093: #define TCGv TCGv_i64
                   2094: #define tcg_temp_new() tcg_temp_new_i64()
                   2095: #define tcg_global_reg_new tcg_global_reg_new_i64
                   2096: #define tcg_global_mem_new tcg_global_mem_new_i64
                   2097: #define tcg_temp_local_new() tcg_temp_local_new_i64()
                   2098: #define tcg_temp_free tcg_temp_free_i64
                   2099: #define tcg_gen_qemu_ldst_op tcg_gen_op3i_i64
                   2100: #define tcg_gen_qemu_ldst_op_i64 tcg_gen_qemu_ldst_op_i64_i64
                   2101: #define TCGV_UNUSED(x) TCGV_UNUSED_I64(x)
1.1.1.2   root     2102: #define TCGV_EQUAL(a, b) TCGV_EQUAL_I64(a, b)
1.1       root     2103: #endif
                   2104: 
                   2105: /* debug info: write the PC of the corresponding QEMU CPU instruction */
                   2106: static inline void tcg_gen_debug_insn_start(uint64_t pc)
                   2107: {
                   2108:     /* XXX: must really use a 32 bit size for TCGArg in all cases */
                   2109: #if TARGET_LONG_BITS > TCG_TARGET_REG_BITS
                   2110:     tcg_gen_op2ii(INDEX_op_debug_insn_start, 
                   2111:                   (uint32_t)(pc), (uint32_t)(pc >> 32));
                   2112: #else
                   2113:     tcg_gen_op1i(INDEX_op_debug_insn_start, pc);
                   2114: #endif
                   2115: }
                   2116: 
                   2117: static inline void tcg_gen_exit_tb(tcg_target_long val)
                   2118: {
                   2119:     tcg_gen_op1i(INDEX_op_exit_tb, val);
                   2120: }
                   2121: 
                   2122: static inline void tcg_gen_goto_tb(int idx)
                   2123: {
                   2124:     tcg_gen_op1i(INDEX_op_goto_tb, idx);
                   2125: }
                   2126: 
                   2127: #if TCG_TARGET_REG_BITS == 32
                   2128: static inline void tcg_gen_qemu_ld8u(TCGv ret, TCGv addr, int mem_index)
                   2129: {
                   2130: #if TARGET_LONG_BITS == 32
                   2131:     tcg_gen_op3i_i32(INDEX_op_qemu_ld8u, ret, addr, mem_index);
                   2132: #else
                   2133:     tcg_gen_op4i_i32(INDEX_op_qemu_ld8u, TCGV_LOW(ret), TCGV_LOW(addr),
                   2134:                      TCGV_HIGH(addr), mem_index);
                   2135:     tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
                   2136: #endif
                   2137: }
                   2138: 
                   2139: static inline void tcg_gen_qemu_ld8s(TCGv ret, TCGv addr, int mem_index)
                   2140: {
                   2141: #if TARGET_LONG_BITS == 32
                   2142:     tcg_gen_op3i_i32(INDEX_op_qemu_ld8s, ret, addr, mem_index);
                   2143: #else
                   2144:     tcg_gen_op4i_i32(INDEX_op_qemu_ld8s, TCGV_LOW(ret), TCGV_LOW(addr),
                   2145:                      TCGV_HIGH(addr), mem_index);
                   2146:     tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
                   2147: #endif
                   2148: }
                   2149: 
                   2150: static inline void tcg_gen_qemu_ld16u(TCGv ret, TCGv addr, int mem_index)
                   2151: {
                   2152: #if TARGET_LONG_BITS == 32
                   2153:     tcg_gen_op3i_i32(INDEX_op_qemu_ld16u, ret, addr, mem_index);
                   2154: #else
                   2155:     tcg_gen_op4i_i32(INDEX_op_qemu_ld16u, TCGV_LOW(ret), TCGV_LOW(addr),
                   2156:                      TCGV_HIGH(addr), mem_index);
                   2157:     tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
                   2158: #endif
                   2159: }
                   2160: 
                   2161: static inline void tcg_gen_qemu_ld16s(TCGv ret, TCGv addr, int mem_index)
                   2162: {
                   2163: #if TARGET_LONG_BITS == 32
                   2164:     tcg_gen_op3i_i32(INDEX_op_qemu_ld16s, ret, addr, mem_index);
                   2165: #else
                   2166:     tcg_gen_op4i_i32(INDEX_op_qemu_ld16s, TCGV_LOW(ret), TCGV_LOW(addr),
                   2167:                      TCGV_HIGH(addr), mem_index);
                   2168:     tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
                   2169: #endif
                   2170: }
                   2171: 
                   2172: static inline void tcg_gen_qemu_ld32u(TCGv ret, TCGv addr, int mem_index)
                   2173: {
                   2174: #if TARGET_LONG_BITS == 32
1.1.1.4 ! root     2175:     tcg_gen_op3i_i32(INDEX_op_qemu_ld32, ret, addr, mem_index);
1.1       root     2176: #else
1.1.1.4 ! root     2177:     tcg_gen_op4i_i32(INDEX_op_qemu_ld32, TCGV_LOW(ret), TCGV_LOW(addr),
1.1       root     2178:                      TCGV_HIGH(addr), mem_index);
                   2179:     tcg_gen_movi_i32(TCGV_HIGH(ret), 0);
                   2180: #endif
                   2181: }
                   2182: 
                   2183: static inline void tcg_gen_qemu_ld32s(TCGv ret, TCGv addr, int mem_index)
                   2184: {
                   2185: #if TARGET_LONG_BITS == 32
1.1.1.4 ! root     2186:     tcg_gen_op3i_i32(INDEX_op_qemu_ld32, ret, addr, mem_index);
1.1       root     2187: #else
1.1.1.4 ! root     2188:     tcg_gen_op4i_i32(INDEX_op_qemu_ld32, TCGV_LOW(ret), TCGV_LOW(addr),
1.1       root     2189:                      TCGV_HIGH(addr), mem_index);
                   2190:     tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31);
                   2191: #endif
                   2192: }
                   2193: 
                   2194: static inline void tcg_gen_qemu_ld64(TCGv_i64 ret, TCGv addr, int mem_index)
                   2195: {
                   2196: #if TARGET_LONG_BITS == 32
                   2197:     tcg_gen_op4i_i32(INDEX_op_qemu_ld64, TCGV_LOW(ret), TCGV_HIGH(ret), addr, mem_index);
                   2198: #else
                   2199:     tcg_gen_op5i_i32(INDEX_op_qemu_ld64, TCGV_LOW(ret), TCGV_HIGH(ret),
                   2200:                      TCGV_LOW(addr), TCGV_HIGH(addr), mem_index);
                   2201: #endif
                   2202: }
                   2203: 
                   2204: static inline void tcg_gen_qemu_st8(TCGv arg, TCGv addr, int mem_index)
                   2205: {
                   2206: #if TARGET_LONG_BITS == 32
                   2207:     tcg_gen_op3i_i32(INDEX_op_qemu_st8, arg, addr, mem_index);
                   2208: #else
                   2209:     tcg_gen_op4i_i32(INDEX_op_qemu_st8, TCGV_LOW(arg), TCGV_LOW(addr),
                   2210:                      TCGV_HIGH(addr), mem_index);
                   2211: #endif
                   2212: }
                   2213: 
                   2214: static inline void tcg_gen_qemu_st16(TCGv arg, TCGv addr, int mem_index)
                   2215: {
                   2216: #if TARGET_LONG_BITS == 32
                   2217:     tcg_gen_op3i_i32(INDEX_op_qemu_st16, arg, addr, mem_index);
                   2218: #else
                   2219:     tcg_gen_op4i_i32(INDEX_op_qemu_st16, TCGV_LOW(arg), TCGV_LOW(addr),
                   2220:                      TCGV_HIGH(addr), mem_index);
                   2221: #endif
                   2222: }
                   2223: 
                   2224: static inline void tcg_gen_qemu_st32(TCGv arg, TCGv addr, int mem_index)
                   2225: {
                   2226: #if TARGET_LONG_BITS == 32
                   2227:     tcg_gen_op3i_i32(INDEX_op_qemu_st32, arg, addr, mem_index);
                   2228: #else
                   2229:     tcg_gen_op4i_i32(INDEX_op_qemu_st32, TCGV_LOW(arg), TCGV_LOW(addr),
                   2230:                      TCGV_HIGH(addr), mem_index);
                   2231: #endif
                   2232: }
                   2233: 
                   2234: static inline void tcg_gen_qemu_st64(TCGv_i64 arg, TCGv addr, int mem_index)
                   2235: {
                   2236: #if TARGET_LONG_BITS == 32
                   2237:     tcg_gen_op4i_i32(INDEX_op_qemu_st64, TCGV_LOW(arg), TCGV_HIGH(arg), addr,
                   2238:                      mem_index);
                   2239: #else
                   2240:     tcg_gen_op5i_i32(INDEX_op_qemu_st64, TCGV_LOW(arg), TCGV_HIGH(arg),
                   2241:                      TCGV_LOW(addr), TCGV_HIGH(addr), mem_index);
                   2242: #endif
                   2243: }
                   2244: 
                   2245: #define tcg_gen_ld_ptr tcg_gen_ld_i32
                   2246: #define tcg_gen_discard_ptr tcg_gen_discard_i32
                   2247: 
                   2248: #else /* TCG_TARGET_REG_BITS == 32 */
                   2249: 
                   2250: static inline void tcg_gen_qemu_ld8u(TCGv ret, TCGv addr, int mem_index)
                   2251: {
                   2252:     tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld8u, ret, addr, mem_index);
                   2253: }
                   2254: 
                   2255: static inline void tcg_gen_qemu_ld8s(TCGv ret, TCGv addr, int mem_index)
                   2256: {
                   2257:     tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld8s, ret, addr, mem_index);
                   2258: }
                   2259: 
                   2260: static inline void tcg_gen_qemu_ld16u(TCGv ret, TCGv addr, int mem_index)
                   2261: {
                   2262:     tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld16u, ret, addr, mem_index);
                   2263: }
                   2264: 
                   2265: static inline void tcg_gen_qemu_ld16s(TCGv ret, TCGv addr, int mem_index)
                   2266: {
                   2267:     tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld16s, ret, addr, mem_index);
                   2268: }
                   2269: 
                   2270: static inline void tcg_gen_qemu_ld32u(TCGv ret, TCGv addr, int mem_index)
                   2271: {
1.1.1.4 ! root     2272: #if TARGET_LONG_BITS == 32
        !          2273:     tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld32, ret, addr, mem_index);
        !          2274: #else
1.1       root     2275:     tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld32u, ret, addr, mem_index);
1.1.1.4 ! root     2276: #endif
1.1       root     2277: }
                   2278: 
                   2279: static inline void tcg_gen_qemu_ld32s(TCGv ret, TCGv addr, int mem_index)
                   2280: {
1.1.1.4 ! root     2281: #if TARGET_LONG_BITS == 32
        !          2282:     tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld32, ret, addr, mem_index);
        !          2283: #else
1.1       root     2284:     tcg_gen_qemu_ldst_op(INDEX_op_qemu_ld32s, ret, addr, mem_index);
1.1.1.4 ! root     2285: #endif
1.1       root     2286: }
                   2287: 
                   2288: static inline void tcg_gen_qemu_ld64(TCGv_i64 ret, TCGv addr, int mem_index)
                   2289: {
                   2290:     tcg_gen_qemu_ldst_op_i64(INDEX_op_qemu_ld64, ret, addr, mem_index);
                   2291: }
                   2292: 
                   2293: static inline void tcg_gen_qemu_st8(TCGv arg, TCGv addr, int mem_index)
                   2294: {
                   2295:     tcg_gen_qemu_ldst_op(INDEX_op_qemu_st8, arg, addr, mem_index);
                   2296: }
                   2297: 
                   2298: static inline void tcg_gen_qemu_st16(TCGv arg, TCGv addr, int mem_index)
                   2299: {
                   2300:     tcg_gen_qemu_ldst_op(INDEX_op_qemu_st16, arg, addr, mem_index);
                   2301: }
                   2302: 
                   2303: static inline void tcg_gen_qemu_st32(TCGv arg, TCGv addr, int mem_index)
                   2304: {
                   2305:     tcg_gen_qemu_ldst_op(INDEX_op_qemu_st32, arg, addr, mem_index);
                   2306: }
                   2307: 
                   2308: static inline void tcg_gen_qemu_st64(TCGv_i64 arg, TCGv addr, int mem_index)
                   2309: {
                   2310:     tcg_gen_qemu_ldst_op_i64(INDEX_op_qemu_st64, arg, addr, mem_index);
                   2311: }
                   2312: 
                   2313: #define tcg_gen_ld_ptr tcg_gen_ld_i64
                   2314: #define tcg_gen_discard_ptr tcg_gen_discard_i64
                   2315: 
                   2316: #endif /* TCG_TARGET_REG_BITS != 32 */
                   2317: 
                   2318: #if TARGET_LONG_BITS == 64
                   2319: #define tcg_gen_movi_tl tcg_gen_movi_i64
                   2320: #define tcg_gen_mov_tl tcg_gen_mov_i64
                   2321: #define tcg_gen_ld8u_tl tcg_gen_ld8u_i64
                   2322: #define tcg_gen_ld8s_tl tcg_gen_ld8s_i64
                   2323: #define tcg_gen_ld16u_tl tcg_gen_ld16u_i64
                   2324: #define tcg_gen_ld16s_tl tcg_gen_ld16s_i64
                   2325: #define tcg_gen_ld32u_tl tcg_gen_ld32u_i64
                   2326: #define tcg_gen_ld32s_tl tcg_gen_ld32s_i64
                   2327: #define tcg_gen_ld_tl tcg_gen_ld_i64
                   2328: #define tcg_gen_st8_tl tcg_gen_st8_i64
                   2329: #define tcg_gen_st16_tl tcg_gen_st16_i64
                   2330: #define tcg_gen_st32_tl tcg_gen_st32_i64
                   2331: #define tcg_gen_st_tl tcg_gen_st_i64
                   2332: #define tcg_gen_add_tl tcg_gen_add_i64
                   2333: #define tcg_gen_addi_tl tcg_gen_addi_i64
                   2334: #define tcg_gen_sub_tl tcg_gen_sub_i64
                   2335: #define tcg_gen_neg_tl tcg_gen_neg_i64
                   2336: #define tcg_gen_subfi_tl tcg_gen_subfi_i64
                   2337: #define tcg_gen_subi_tl tcg_gen_subi_i64
                   2338: #define tcg_gen_and_tl tcg_gen_and_i64
                   2339: #define tcg_gen_andi_tl tcg_gen_andi_i64
                   2340: #define tcg_gen_or_tl tcg_gen_or_i64
                   2341: #define tcg_gen_ori_tl tcg_gen_ori_i64
                   2342: #define tcg_gen_xor_tl tcg_gen_xor_i64
                   2343: #define tcg_gen_xori_tl tcg_gen_xori_i64
                   2344: #define tcg_gen_not_tl tcg_gen_not_i64
                   2345: #define tcg_gen_shl_tl tcg_gen_shl_i64
                   2346: #define tcg_gen_shli_tl tcg_gen_shli_i64
                   2347: #define tcg_gen_shr_tl tcg_gen_shr_i64
                   2348: #define tcg_gen_shri_tl tcg_gen_shri_i64
                   2349: #define tcg_gen_sar_tl tcg_gen_sar_i64
                   2350: #define tcg_gen_sari_tl tcg_gen_sari_i64
                   2351: #define tcg_gen_brcond_tl tcg_gen_brcond_i64
                   2352: #define tcg_gen_brcondi_tl tcg_gen_brcondi_i64
1.1.1.4 ! root     2353: #define tcg_gen_setcond_tl tcg_gen_setcond_i64
        !          2354: #define tcg_gen_setcondi_tl tcg_gen_setcondi_i64
1.1       root     2355: #define tcg_gen_mul_tl tcg_gen_mul_i64
                   2356: #define tcg_gen_muli_tl tcg_gen_muli_i64
1.1.1.2   root     2357: #define tcg_gen_div_tl tcg_gen_div_i64
                   2358: #define tcg_gen_rem_tl tcg_gen_rem_i64
                   2359: #define tcg_gen_divu_tl tcg_gen_divu_i64
                   2360: #define tcg_gen_remu_tl tcg_gen_remu_i64
1.1       root     2361: #define tcg_gen_discard_tl tcg_gen_discard_i64
                   2362: #define tcg_gen_trunc_tl_i32 tcg_gen_trunc_i64_i32
                   2363: #define tcg_gen_trunc_i64_tl tcg_gen_mov_i64
                   2364: #define tcg_gen_extu_i32_tl tcg_gen_extu_i32_i64
                   2365: #define tcg_gen_ext_i32_tl tcg_gen_ext_i32_i64
                   2366: #define tcg_gen_extu_tl_i64 tcg_gen_mov_i64
                   2367: #define tcg_gen_ext_tl_i64 tcg_gen_mov_i64
                   2368: #define tcg_gen_ext8u_tl tcg_gen_ext8u_i64
                   2369: #define tcg_gen_ext8s_tl tcg_gen_ext8s_i64
                   2370: #define tcg_gen_ext16u_tl tcg_gen_ext16u_i64
                   2371: #define tcg_gen_ext16s_tl tcg_gen_ext16s_i64
                   2372: #define tcg_gen_ext32u_tl tcg_gen_ext32u_i64
                   2373: #define tcg_gen_ext32s_tl tcg_gen_ext32s_i64
1.1.1.2   root     2374: #define tcg_gen_bswap16_tl tcg_gen_bswap16_i64
                   2375: #define tcg_gen_bswap32_tl tcg_gen_bswap32_i64
                   2376: #define tcg_gen_bswap64_tl tcg_gen_bswap64_i64
1.1       root     2377: #define tcg_gen_concat_tl_i64 tcg_gen_concat32_i64
                   2378: #define tcg_gen_andc_tl tcg_gen_andc_i64
                   2379: #define tcg_gen_eqv_tl tcg_gen_eqv_i64
                   2380: #define tcg_gen_nand_tl tcg_gen_nand_i64
                   2381: #define tcg_gen_nor_tl tcg_gen_nor_i64
                   2382: #define tcg_gen_orc_tl tcg_gen_orc_i64
                   2383: #define tcg_gen_rotl_tl tcg_gen_rotl_i64
                   2384: #define tcg_gen_rotli_tl tcg_gen_rotli_i64
                   2385: #define tcg_gen_rotr_tl tcg_gen_rotr_i64
                   2386: #define tcg_gen_rotri_tl tcg_gen_rotri_i64
                   2387: #define tcg_const_tl tcg_const_i64
                   2388: #define tcg_const_local_tl tcg_const_local_i64
                   2389: #else
                   2390: #define tcg_gen_movi_tl tcg_gen_movi_i32
                   2391: #define tcg_gen_mov_tl tcg_gen_mov_i32
                   2392: #define tcg_gen_ld8u_tl tcg_gen_ld8u_i32
                   2393: #define tcg_gen_ld8s_tl tcg_gen_ld8s_i32
                   2394: #define tcg_gen_ld16u_tl tcg_gen_ld16u_i32
                   2395: #define tcg_gen_ld16s_tl tcg_gen_ld16s_i32
                   2396: #define tcg_gen_ld32u_tl tcg_gen_ld_i32
                   2397: #define tcg_gen_ld32s_tl tcg_gen_ld_i32
                   2398: #define tcg_gen_ld_tl tcg_gen_ld_i32
                   2399: #define tcg_gen_st8_tl tcg_gen_st8_i32
                   2400: #define tcg_gen_st16_tl tcg_gen_st16_i32
                   2401: #define tcg_gen_st32_tl tcg_gen_st_i32
                   2402: #define tcg_gen_st_tl tcg_gen_st_i32
                   2403: #define tcg_gen_add_tl tcg_gen_add_i32
                   2404: #define tcg_gen_addi_tl tcg_gen_addi_i32
                   2405: #define tcg_gen_sub_tl tcg_gen_sub_i32
                   2406: #define tcg_gen_neg_tl tcg_gen_neg_i32
                   2407: #define tcg_gen_subfi_tl tcg_gen_subfi_i32
                   2408: #define tcg_gen_subi_tl tcg_gen_subi_i32
                   2409: #define tcg_gen_and_tl tcg_gen_and_i32
                   2410: #define tcg_gen_andi_tl tcg_gen_andi_i32
                   2411: #define tcg_gen_or_tl tcg_gen_or_i32
                   2412: #define tcg_gen_ori_tl tcg_gen_ori_i32
                   2413: #define tcg_gen_xor_tl tcg_gen_xor_i32
                   2414: #define tcg_gen_xori_tl tcg_gen_xori_i32
                   2415: #define tcg_gen_not_tl tcg_gen_not_i32
                   2416: #define tcg_gen_shl_tl tcg_gen_shl_i32
                   2417: #define tcg_gen_shli_tl tcg_gen_shli_i32
                   2418: #define tcg_gen_shr_tl tcg_gen_shr_i32
                   2419: #define tcg_gen_shri_tl tcg_gen_shri_i32
                   2420: #define tcg_gen_sar_tl tcg_gen_sar_i32
                   2421: #define tcg_gen_sari_tl tcg_gen_sari_i32
                   2422: #define tcg_gen_brcond_tl tcg_gen_brcond_i32
                   2423: #define tcg_gen_brcondi_tl tcg_gen_brcondi_i32
1.1.1.4 ! root     2424: #define tcg_gen_setcond_tl tcg_gen_setcond_i32
        !          2425: #define tcg_gen_setcondi_tl tcg_gen_setcondi_i32
1.1       root     2426: #define tcg_gen_mul_tl tcg_gen_mul_i32
                   2427: #define tcg_gen_muli_tl tcg_gen_muli_i32
1.1.1.2   root     2428: #define tcg_gen_div_tl tcg_gen_div_i32
                   2429: #define tcg_gen_rem_tl tcg_gen_rem_i32
                   2430: #define tcg_gen_divu_tl tcg_gen_divu_i32
                   2431: #define tcg_gen_remu_tl tcg_gen_remu_i32
1.1       root     2432: #define tcg_gen_discard_tl tcg_gen_discard_i32
                   2433: #define tcg_gen_trunc_tl_i32 tcg_gen_mov_i32
                   2434: #define tcg_gen_trunc_i64_tl tcg_gen_trunc_i64_i32
                   2435: #define tcg_gen_extu_i32_tl tcg_gen_mov_i32
                   2436: #define tcg_gen_ext_i32_tl tcg_gen_mov_i32
                   2437: #define tcg_gen_extu_tl_i64 tcg_gen_extu_i32_i64
                   2438: #define tcg_gen_ext_tl_i64 tcg_gen_ext_i32_i64
                   2439: #define tcg_gen_ext8u_tl tcg_gen_ext8u_i32
                   2440: #define tcg_gen_ext8s_tl tcg_gen_ext8s_i32
                   2441: #define tcg_gen_ext16u_tl tcg_gen_ext16u_i32
                   2442: #define tcg_gen_ext16s_tl tcg_gen_ext16s_i32
                   2443: #define tcg_gen_ext32u_tl tcg_gen_mov_i32
                   2444: #define tcg_gen_ext32s_tl tcg_gen_mov_i32
1.1.1.2   root     2445: #define tcg_gen_bswap16_tl tcg_gen_bswap16_i32
                   2446: #define tcg_gen_bswap32_tl tcg_gen_bswap32_i32
1.1       root     2447: #define tcg_gen_concat_tl_i64 tcg_gen_concat_i32_i64
                   2448: #define tcg_gen_andc_tl tcg_gen_andc_i32
                   2449: #define tcg_gen_eqv_tl tcg_gen_eqv_i32
                   2450: #define tcg_gen_nand_tl tcg_gen_nand_i32
                   2451: #define tcg_gen_nor_tl tcg_gen_nor_i32
                   2452: #define tcg_gen_orc_tl tcg_gen_orc_i32
                   2453: #define tcg_gen_rotl_tl tcg_gen_rotl_i32
                   2454: #define tcg_gen_rotli_tl tcg_gen_rotli_i32
                   2455: #define tcg_gen_rotr_tl tcg_gen_rotr_i32
                   2456: #define tcg_gen_rotri_tl tcg_gen_rotri_i32
                   2457: #define tcg_const_tl tcg_const_i32
                   2458: #define tcg_const_local_tl tcg_const_local_i32
                   2459: #endif
                   2460: 
                   2461: #if TCG_TARGET_REG_BITS == 32
                   2462: #define tcg_gen_add_ptr tcg_gen_add_i32
                   2463: #define tcg_gen_addi_ptr tcg_gen_addi_i32
                   2464: #define tcg_gen_ext_i32_ptr tcg_gen_mov_i32
                   2465: #else /* TCG_TARGET_REG_BITS == 32 */
                   2466: #define tcg_gen_add_ptr tcg_gen_add_i64
                   2467: #define tcg_gen_addi_ptr tcg_gen_addi_i64
                   2468: #define tcg_gen_ext_i32_ptr tcg_gen_ext_i32_i64
                   2469: #endif /* TCG_TARGET_REG_BITS != 32 */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.