Annotation of qemu/target-ppc/op.c, revision 1.1.1.4

1.1       root        1: /*
                      2:  *  PowerPC emulation micro-operations for qemu.
1.1.1.4 ! root        3:  *
        !             4:  *  Copyright (c) 2003-2007 Jocelyn Mayer
1.1       root        5:  *
                      6:  * This library is free software; you can redistribute it and/or
                      7:  * modify it under the terms of the GNU Lesser General Public
                      8:  * License as published by the Free Software Foundation; either
                      9:  * version 2 of the License, or (at your option) any later version.
                     10:  *
                     11:  * This library is distributed in the hope that it will be useful,
                     12:  * but WITHOUT ANY WARRANTY; without even the implied warranty of
                     13:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
                     14:  * Lesser General Public License for more details.
                     15:  *
                     16:  * You should have received a copy of the GNU Lesser General Public
                     17:  * License along with this library; if not, write to the Free Software
                     18:  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
                     19:  */
                     20: 
                     21: //#define DEBUG_OP
                     22: 
                     23: #include "config.h"
                     24: #include "exec.h"
1.1.1.4 ! root       25: #include "host-utils.h"
        !            26: #include "helper_regs.h"
        !            27: #include "op_helper.h"
1.1       root       28: 
                     29: #define REG 0
                     30: #include "op_template.h"
                     31: 
                     32: #define REG 1
                     33: #include "op_template.h"
                     34: 
                     35: #define REG 2
                     36: #include "op_template.h"
                     37: 
                     38: #define REG 3
                     39: #include "op_template.h"
                     40: 
                     41: #define REG 4
                     42: #include "op_template.h"
                     43: 
                     44: #define REG 5
                     45: #include "op_template.h"
                     46: 
                     47: #define REG 6
                     48: #include "op_template.h"
                     49: 
                     50: #define REG 7
                     51: #include "op_template.h"
                     52: 
                     53: #define REG 8
                     54: #include "op_template.h"
                     55: 
                     56: #define REG 9
                     57: #include "op_template.h"
                     58: 
                     59: #define REG 10
                     60: #include "op_template.h"
                     61: 
                     62: #define REG 11
                     63: #include "op_template.h"
                     64: 
                     65: #define REG 12
                     66: #include "op_template.h"
                     67: 
                     68: #define REG 13
                     69: #include "op_template.h"
                     70: 
                     71: #define REG 14
                     72: #include "op_template.h"
                     73: 
                     74: #define REG 15
                     75: #include "op_template.h"
                     76: 
                     77: #define REG 16
                     78: #include "op_template.h"
                     79: 
                     80: #define REG 17
                     81: #include "op_template.h"
                     82: 
                     83: #define REG 18
                     84: #include "op_template.h"
                     85: 
                     86: #define REG 19
                     87: #include "op_template.h"
                     88: 
                     89: #define REG 20
                     90: #include "op_template.h"
                     91: 
                     92: #define REG 21
                     93: #include "op_template.h"
                     94: 
                     95: #define REG 22
                     96: #include "op_template.h"
                     97: 
                     98: #define REG 23
                     99: #include "op_template.h"
                    100: 
                    101: #define REG 24
                    102: #include "op_template.h"
                    103: 
                    104: #define REG 25
                    105: #include "op_template.h"
                    106: 
                    107: #define REG 26
                    108: #include "op_template.h"
                    109: 
                    110: #define REG 27
                    111: #include "op_template.h"
                    112: 
                    113: #define REG 28
                    114: #include "op_template.h"
                    115: 
                    116: #define REG 29
                    117: #include "op_template.h"
                    118: 
                    119: #define REG 30
                    120: #include "op_template.h"
                    121: 
                    122: #define REG 31
                    123: #include "op_template.h"
                    124: 
1.1.1.4 ! root      125: void OPPROTO op_print_mem_EA (void)
        !           126: {
        !           127:     do_print_mem_EA(T0);
        !           128:     RETURN();
        !           129: }
        !           130: 
1.1       root      131: /* PowerPC state maintenance operations */
                    132: /* set_Rc0 */
1.1.1.4 ! root      133: void OPPROTO op_set_Rc0 (void)
1.1       root      134: {
1.1.1.4 ! root      135:     env->crf[0] = T0 | xer_so;
1.1       root      136:     RETURN();
                    137: }
                    138: 
1.1.1.4 ! root      139: /* Constants load */
        !           140: void OPPROTO op_reset_T0 (void)
1.1       root      141: {
1.1.1.4 ! root      142:     T0 = 0;
1.1       root      143:     RETURN();
                    144: }
                    145: 
1.1.1.4 ! root      146: void OPPROTO op_set_T0 (void)
1.1       root      147: {
1.1.1.4 ! root      148:     T0 = (uint32_t)PARAM1;
1.1       root      149:     RETURN();
                    150: }
                    151: 
1.1.1.4 ! root      152: #if defined(TARGET_PPC64)
        !           153: void OPPROTO op_set_T0_64 (void)
1.1       root      154: {
1.1.1.4 ! root      155:     T0 = ((uint64_t)PARAM1 << 32) | (uint64_t)PARAM2;
1.1       root      156:     RETURN();
                    157: }
1.1.1.4 ! root      158: #endif
1.1       root      159: 
1.1.1.4 ! root      160: void OPPROTO op_set_T1 (void)
1.1       root      161: {
1.1.1.4 ! root      162:     T1 = (uint32_t)PARAM1;
1.1       root      163:     RETURN();
                    164: }
                    165: 
1.1.1.4 ! root      166: #if defined(TARGET_PPC64)
        !           167: void OPPROTO op_set_T1_64 (void)
1.1       root      168: {
1.1.1.4 ! root      169:     T1 = ((uint64_t)PARAM1 << 32) | (uint64_t)PARAM2;
1.1       root      170:     RETURN();
                    171: }
1.1.1.4 ! root      172: #endif
1.1       root      173: 
1.1.1.4 ! root      174: #if 0 // unused
        !           175: void OPPROTO op_set_T2 (void)
1.1       root      176: {
1.1.1.4 ! root      177:     T2 = (uint32_t)PARAM1;
1.1       root      178:     RETURN();
                    179: }
1.1.1.4 ! root      180: #endif
1.1       root      181: 
1.1.1.4 ! root      182: void OPPROTO op_move_T1_T0 (void)
1.1       root      183: {
1.1.1.4 ! root      184:     T1 = T0;
        !           185:     RETURN();
1.1       root      186: }
                    187: 
1.1.1.4 ! root      188: void OPPROTO op_move_T2_T0 (void)
1.1       root      189: {
1.1.1.4 ! root      190:     T2 = T0;
        !           191:     RETURN();
1.1       root      192: }
                    193: 
1.1.1.4 ! root      194: void OPPROTO op_moven_T2_T0 (void)
1.1       root      195: {
1.1.1.4 ! root      196:     T2 = ~T0;
        !           197:     RETURN();
1.1       root      198: }
                    199: 
1.1.1.4 ! root      200: /* Generate exceptions */
        !           201: void OPPROTO op_raise_exception_err (void)
1.1.1.3   root      202: {
1.1.1.4 ! root      203:     do_raise_exception_err(PARAM1, PARAM2);
1.1.1.3   root      204: }
                    205: 
1.1.1.4 ! root      206: void OPPROTO op_update_nip (void)
1.1       root      207: {
1.1.1.4 ! root      208:     env->nip = (uint32_t)PARAM1;
1.1       root      209:     RETURN();
                    210: }
                    211: 
1.1.1.4 ! root      212: #if defined(TARGET_PPC64)
        !           213: void OPPROTO op_update_nip_64 (void)
1.1       root      214: {
1.1.1.4 ! root      215:     env->nip = ((uint64_t)PARAM1 << 32) | (uint64_t)PARAM2;
1.1       root      216:     RETURN();
                    217: }
1.1.1.4 ! root      218: #endif
1.1       root      219: 
1.1.1.4 ! root      220: void OPPROTO op_debug (void)
1.1       root      221: {
1.1.1.4 ! root      222:     do_raise_exception(EXCP_DEBUG);
1.1       root      223: }
                    224: 
1.1.1.4 ! root      225: void OPPROTO op_exit_tb (void)
1.1       root      226: {
1.1.1.4 ! root      227:     EXIT_TB();
        !           228: }
        !           229: 
        !           230: /* Load/store special registers */
        !           231: void OPPROTO op_load_cr (void)
        !           232: {
        !           233:     do_load_cr();
1.1       root      234:     RETURN();
                    235: }
                    236: 
1.1.1.4 ! root      237: void OPPROTO op_store_cr (void)
1.1       root      238: {
1.1.1.4 ! root      239:     do_store_cr(PARAM1);
        !           240:     RETURN();
1.1       root      241: }
                    242: 
1.1.1.4 ! root      243: void OPPROTO op_load_cro (void)
1.1       root      244: {
1.1.1.4 ! root      245:     T0 = env->crf[PARAM1];
1.1       root      246:     RETURN();
                    247: }
                    248: 
1.1.1.4 ! root      249: void OPPROTO op_store_cro (void)
1.1       root      250: {
1.1.1.4 ! root      251:     env->crf[PARAM1] = T0;
1.1       root      252:     RETURN();
                    253: }
                    254: 
1.1.1.4 ! root      255: void OPPROTO op_load_xer_cr (void)
1.1       root      256: {
                    257:     T0 = (xer_so << 3) | (xer_ov << 2) | (xer_ca << 1);
                    258:     RETURN();
                    259: }
                    260: 
1.1.1.4 ! root      261: void OPPROTO op_clear_xer_ov (void)
1.1       root      262: {
                    263:     xer_so = 0;
                    264:     xer_ov = 0;
1.1.1.4 ! root      265:     RETURN();
        !           266: }
        !           267: 
        !           268: void OPPROTO op_clear_xer_ca (void)
        !           269: {
1.1       root      270:     xer_ca = 0;
                    271:     RETURN();
                    272: }
                    273: 
1.1.1.4 ! root      274: void OPPROTO op_load_xer_bc (void)
1.1       root      275: {
                    276:     T1 = xer_bc;
                    277:     RETURN();
                    278: }
                    279: 
1.1.1.4 ! root      280: void OPPROTO op_store_xer_bc (void)
1.1       root      281: {
1.1.1.4 ! root      282:     xer_bc = T0;
1.1       root      283:     RETURN();
                    284: }
                    285: 
1.1.1.4 ! root      286: void OPPROTO op_load_xer (void)
1.1       root      287: {
1.1.1.4 ! root      288:     T0 = hreg_load_xer(env);
1.1       root      289:     RETURN();
                    290: }
                    291: 
1.1.1.4 ! root      292: void OPPROTO op_store_xer (void)
1.1       root      293: {
1.1.1.4 ! root      294:     hreg_store_xer(env, T0);
1.1       root      295:     RETURN();
                    296: }
                    297: 
1.1.1.4 ! root      298: #if defined(TARGET_PPC64)
        !           299: void OPPROTO op_store_pri (void)
1.1       root      300: {
1.1.1.4 ! root      301:     do_store_pri(PARAM1);
1.1       root      302:     RETURN();
                    303: }
1.1.1.4 ! root      304: #endif
1.1       root      305: 
1.1.1.4 ! root      306: #if !defined(CONFIG_USER_ONLY)
        !           307: /* Segment registers load and store */
        !           308: void OPPROTO op_load_sr (void)
1.1       root      309: {
1.1.1.4 ! root      310:     T0 = env->sr[T1];
1.1       root      311:     RETURN();
                    312: }
                    313: 
1.1.1.4 ! root      314: void OPPROTO op_store_sr (void)
1.1       root      315: {
1.1.1.4 ! root      316:     do_store_sr(env, T1, T0);
1.1       root      317:     RETURN();
                    318: }
                    319: 
1.1.1.4 ! root      320: #if defined(TARGET_PPC64)
        !           321: void OPPROTO op_load_slb (void)
1.1       root      322: {
1.1.1.4 ! root      323:     T0 = ppc_load_slb(env, T1);
1.1       root      324:     RETURN();
                    325: }
                    326: 
1.1.1.4 ! root      327: void OPPROTO op_store_slb (void)
1.1       root      328: {
1.1.1.4 ! root      329:     ppc_store_slb(env, T1, T0);
1.1       root      330:     RETURN();
                    331: }
1.1.1.4 ! root      332: #endif /* defined(TARGET_PPC64) */
1.1       root      333: 
1.1.1.4 ! root      334: void OPPROTO op_load_sdr1 (void)
1.1       root      335: {
1.1.1.4 ! root      336:     T0 = env->sdr1;
1.1       root      337:     RETURN();
                    338: }
                    339: 
1.1.1.4 ! root      340: void OPPROTO op_store_sdr1 (void)
1.1       root      341: {
1.1.1.4 ! root      342:     do_store_sdr1(env, T0);
1.1       root      343:     RETURN();
                    344: }
                    345: 
1.1.1.4 ! root      346: #if defined (TARGET_PPC64)
        !           347: void OPPROTO op_load_asr (void)
1.1       root      348: {
1.1.1.4 ! root      349:     T0 = env->asr;
1.1       root      350:     RETURN();
                    351: }
                    352: 
1.1.1.4 ! root      353: void OPPROTO op_store_asr (void)
1.1       root      354: {
1.1.1.4 ! root      355:     ppc_store_asr(env, T0);
1.1       root      356:     RETURN();
                    357: }
1.1.1.4 ! root      358: #endif
1.1       root      359: 
1.1.1.4 ! root      360: void OPPROTO op_load_msr (void)
1.1       root      361: {
1.1.1.4 ! root      362:     T0 = env->msr;
1.1       root      363:     RETURN();
                    364: }
                    365: 
1.1.1.4 ! root      366: void OPPROTO op_store_msr (void)
1.1       root      367: {
1.1.1.4 ! root      368:     do_store_msr();
1.1       root      369:     RETURN();
                    370: }
                    371: 
1.1.1.4 ! root      372: #if defined (TARGET_PPC64)
        !           373: void OPPROTO op_store_msr_32 (void)
1.1       root      374: {
1.1.1.4 ! root      375:     T0 = (env->msr & ~0xFFFFFFFFULL) | (T0 & 0xFFFFFFFF);
        !           376:     do_store_msr();
        !           377:     RETURN();
        !           378: }
        !           379: #endif
1.1       root      380: 
1.1.1.4 ! root      381: void OPPROTO op_update_riee (void)
1.1       root      382: {
1.1.1.4 ! root      383:     /* We don't call do_store_msr here as we won't trigger
        !           384:      * any special case nor change hflags
        !           385:      */
        !           386:     T0 &= (1 << MSR_RI) | (1 << MSR_EE);
        !           387:     env->msr &= ~(1 << MSR_RI) | (1 << MSR_EE);
        !           388:     env->msr |= T0;
1.1       root      389:     RETURN();
                    390: }
1.1.1.4 ! root      391: #endif
1.1       root      392: 
1.1.1.4 ! root      393: /* SPR */
        !           394: void OPPROTO op_load_spr (void)
1.1       root      395: {
1.1.1.4 ! root      396:     T0 = env->spr[PARAM1];
        !           397:     RETURN();
1.1       root      398: }
                    399: 
1.1.1.4 ! root      400: void OPPROTO op_store_spr (void)
1.1       root      401: {
1.1.1.4 ! root      402:     env->spr[PARAM1] = T0;
1.1       root      403:     RETURN();
                    404: }
                    405: 
1.1.1.4 ! root      406: void OPPROTO op_load_dump_spr (void)
1.1       root      407: {
1.1.1.4 ! root      408:     T0 = ppc_load_dump_spr(PARAM1);
1.1       root      409:     RETURN();
                    410: }
                    411: 
1.1.1.4 ! root      412: void OPPROTO op_store_dump_spr (void)
1.1       root      413: {
1.1.1.4 ! root      414:     ppc_store_dump_spr(PARAM1, T0);
        !           415:     RETURN();
1.1       root      416: }
                    417: 
1.1.1.4 ! root      418: void OPPROTO op_mask_spr (void)
1.1       root      419: {
1.1.1.4 ! root      420:     env->spr[PARAM1] &= ~T0;
1.1       root      421:     RETURN();
                    422: }
                    423: 
1.1.1.4 ! root      424: void OPPROTO op_load_lr (void)
1.1       root      425: {
1.1.1.4 ! root      426:     T0 = env->lr;
1.1       root      427:     RETURN();
                    428: }
                    429: 
1.1.1.4 ! root      430: void OPPROTO op_store_lr (void)
1.1       root      431: {
1.1.1.4 ! root      432:     env->lr = T0;
1.1       root      433:     RETURN();
                    434: }
                    435: 
1.1.1.4 ! root      436: void OPPROTO op_load_ctr (void)
1.1       root      437: {
1.1.1.4 ! root      438:     T0 = env->ctr;
1.1       root      439:     RETURN();
                    440: }
                    441: 
1.1.1.4 ! root      442: void OPPROTO op_store_ctr (void)
1.1       root      443: {
1.1.1.4 ! root      444:     env->ctr = T0;
1.1       root      445:     RETURN();
                    446: }
                    447: 
1.1.1.4 ! root      448: void OPPROTO op_load_tbl (void)
1.1       root      449: {
1.1.1.4 ! root      450:     T0 = cpu_ppc_load_tbl(env);
1.1       root      451:     RETURN();
                    452: }
                    453: 
1.1.1.4 ! root      454: void OPPROTO op_load_tbu (void)
1.1       root      455: {
1.1.1.4 ! root      456:     T0 = cpu_ppc_load_tbu(env);
1.1       root      457:     RETURN();
                    458: }
                    459: 
1.1.1.4 ! root      460: void OPPROTO op_load_atbl (void)
1.1       root      461: {
1.1.1.4 ! root      462:     T0 = cpu_ppc_load_atbl(env);
1.1       root      463:     RETURN();
                    464: }
                    465: 
1.1.1.4 ! root      466: void OPPROTO op_load_atbu (void)
1.1       root      467: {
1.1.1.4 ! root      468:     T0 = cpu_ppc_load_atbu(env);
        !           469:     RETURN();
1.1       root      470: }
                    471: 
1.1.1.4 ! root      472: #if !defined(CONFIG_USER_ONLY)
        !           473: void OPPROTO op_store_tbl (void)
1.1       root      474: {
1.1.1.4 ! root      475:     cpu_ppc_store_tbl(env, T0);
        !           476:     RETURN();
1.1.1.2   root      477: }
                    478: 
1.1.1.4 ! root      479: void OPPROTO op_store_tbu (void)
1.1.1.2   root      480: {
1.1.1.4 ! root      481:     cpu_ppc_store_tbu(env, T0);
        !           482:     RETURN();
1.1       root      483: }
                    484: 
1.1.1.4 ! root      485: void OPPROTO op_store_atbl (void)
1.1       root      486: {
1.1.1.4 ! root      487:     cpu_ppc_store_atbl(env, T0);
        !           488:     RETURN();
1.1       root      489: }
                    490: 
1.1.1.4 ! root      491: void OPPROTO op_store_atbu (void)
1.1       root      492: {
1.1.1.4 ! root      493:     cpu_ppc_store_atbu(env, T0);
1.1       root      494:     RETURN();
                    495: }
                    496: 
1.1.1.4 ! root      497: void OPPROTO op_load_decr (void)
1.1       root      498: {
1.1.1.4 ! root      499:     T0 = cpu_ppc_load_decr(env);
1.1       root      500:     RETURN();
                    501: }
                    502: 
1.1.1.4 ! root      503: void OPPROTO op_store_decr (void)
1.1       root      504: {
1.1.1.4 ! root      505:     cpu_ppc_store_decr(env, T0);
        !           506:     RETURN();
1.1       root      507: }
                    508: 
1.1.1.4 ! root      509: void OPPROTO op_load_ibat (void)
1.1       root      510: {
1.1.1.4 ! root      511:     T0 = env->IBAT[PARAM1][PARAM2];
        !           512:     RETURN();
1.1       root      513: }
                    514: 
1.1.1.4 ! root      515: void OPPROTO op_store_ibatu (void)
1.1       root      516: {
1.1.1.4 ! root      517:     do_store_ibatu(env, PARAM1, T0);
        !           518:     RETURN();
1.1       root      519: }
                    520: 
1.1.1.4 ! root      521: void OPPROTO op_store_ibatl (void)
1.1       root      522: {
1.1.1.4 ! root      523: #if 1
        !           524:     env->IBAT[1][PARAM1] = T0;
        !           525: #else
        !           526:     do_store_ibatl(env, PARAM1, T0);
        !           527: #endif
        !           528:     RETURN();
1.1       root      529: }
                    530: 
1.1.1.4 ! root      531: void OPPROTO op_load_dbat (void)
1.1       root      532: {
1.1.1.4 ! root      533:     T0 = env->DBAT[PARAM1][PARAM2];
        !           534:     RETURN();
1.1       root      535: }
                    536: 
1.1.1.4 ! root      537: void OPPROTO op_store_dbatu (void)
1.1       root      538: {
1.1.1.4 ! root      539:     do_store_dbatu(env, PARAM1, T0);
        !           540:     RETURN();
1.1       root      541: }
                    542: 
1.1.1.4 ! root      543: void OPPROTO op_store_dbatl (void)
1.1       root      544: {
1.1.1.4 ! root      545: #if 1
        !           546:     env->DBAT[1][PARAM1] = T0;
        !           547: #else
        !           548:     do_store_dbatl(env, PARAM1, T0);
        !           549: #endif
        !           550:     RETURN();
1.1       root      551: }
1.1.1.4 ! root      552: #endif /* !defined(CONFIG_USER_ONLY) */
1.1       root      553: 
1.1.1.4 ! root      554: /* FPSCR */
        !           555: #ifdef CONFIG_SOFTFLOAT
        !           556: void OPPROTO op_reset_fpstatus (void)
1.1       root      557: {
1.1.1.4 ! root      558:     env->fp_status.float_exception_flags = 0;
        !           559:     RETURN();
1.1       root      560: }
1.1.1.4 ! root      561: #endif
1.1       root      562: 
1.1.1.4 ! root      563: void OPPROTO op_compute_fprf (void)
1.1       root      564: {
1.1.1.4 ! root      565:     do_compute_fprf(PARAM1);
        !           566:     RETURN();
1.1       root      567: }
                    568: 
1.1.1.4 ! root      569: #ifdef CONFIG_SOFTFLOAT
        !           570: void OPPROTO op_float_check_status (void)
1.1       root      571: {
1.1.1.4 ! root      572:     do_float_check_status();
        !           573:     RETURN();
1.1       root      574: }
1.1.1.4 ! root      575: #else
        !           576: void OPPROTO op_float_check_status (void)
1.1       root      577: {
1.1.1.4 ! root      578:     if (env->exception_index == POWERPC_EXCP_PROGRAM &&
        !           579:         (env->error_code & POWERPC_EXCP_FP)) {
        !           580:         /* Differred floating-point exception after target FPR update */
        !           581:         if (msr_fe0 != 0 || msr_fe1 != 0)
        !           582:             do_raise_exception_err(env->exception_index, env->error_code);
        !           583:     }
1.1       root      584:     RETURN();
                    585: }
1.1.1.4 ! root      586: #endif
1.1       root      587: 
1.1.1.4 ! root      588: #if defined(WORDS_BIGENDIAN)
        !           589: #define WORD0 0
        !           590: #define WORD1 1
        !           591: #else
        !           592: #define WORD0 1
        !           593: #define WORD1 0
        !           594: #endif
        !           595: void OPPROTO op_load_fpscr_FT0 (void)
1.1       root      596: {
1.1.1.4 ! root      597:     /* The 32 MSB of the target fpr are undefined.
        !           598:      * They'll be zero...
        !           599:      */
        !           600:     union {
        !           601:         float64 d;
        !           602:         struct {
        !           603:             uint32_t u[2];
        !           604:         } s;
        !           605:     } u;
        !           606: 
        !           607:     u.s.u[WORD0] = 0;
        !           608:     u.s.u[WORD1] = env->fpscr;
        !           609:     FT0 = u.d;
1.1       root      610:     RETURN();
                    611: }
                    612: 
1.1.1.4 ! root      613: void OPPROTO op_set_FT0 (void)
1.1       root      614: {
1.1.1.4 ! root      615:     union {
        !           616:         float64 d;
        !           617:         struct {
        !           618:             uint32_t u[2];
        !           619:         } s;
        !           620:     } u;
        !           621: 
        !           622:     u.s.u[WORD0] = 0;
        !           623:     u.s.u[WORD1] = PARAM1;
        !           624:     FT0 = u.d;
1.1       root      625:     RETURN();
                    626: }
1.1.1.4 ! root      627: #undef WORD0
        !           628: #undef WORD1
1.1       root      629: 
1.1.1.4 ! root      630: void OPPROTO op_load_fpscr_T0 (void)
1.1       root      631: {
1.1.1.4 ! root      632:     T0 = (env->fpscr >> PARAM1) & 0xF;
1.1       root      633:     RETURN();
                    634: }
                    635: 
1.1.1.4 ! root      636: void OPPROTO op_load_fpcc (void)
1.1       root      637: {
1.1.1.4 ! root      638:     T0 = fpscr_fpcc;
1.1       root      639:     RETURN();
                    640: }
                    641: 
1.1.1.4 ! root      642: void OPPROTO op_fpscr_resetbit (void)
1.1       root      643: {
1.1.1.4 ! root      644:     env->fpscr &= PARAM1;
        !           645:     RETURN();
1.1       root      646: }
                    647: 
1.1.1.4 ! root      648: void OPPROTO op_fpscr_setbit (void)
1.1       root      649: {
1.1.1.4 ! root      650:     do_fpscr_setbit(PARAM1);
1.1       root      651:     RETURN();
                    652: }
                    653: 
1.1.1.4 ! root      654: void OPPROTO op_store_fpscr (void)
1.1       root      655: {
1.1.1.4 ! root      656:     do_store_fpscr(PARAM1);
1.1       root      657:     RETURN();
                    658: }
                    659: 
1.1.1.4 ! root      660: /* Branch */
        !           661: #define EIP env->nip
        !           662: 
        !           663: void OPPROTO op_setlr (void)
1.1       root      664: {
1.1.1.4 ! root      665:     env->lr = (uint32_t)PARAM1;
1.1       root      666:     RETURN();
                    667: }
                    668: 
1.1.1.4 ! root      669: #if defined (TARGET_PPC64)
        !           670: void OPPROTO op_setlr_64 (void)
1.1       root      671: {
1.1.1.4 ! root      672:     env->lr = ((uint64_t)PARAM1 << 32) | (uint64_t)PARAM2;
1.1       root      673:     RETURN();
                    674: }
1.1.1.4 ! root      675: #endif
1.1       root      676: 
1.1.1.4 ! root      677: void OPPROTO op_goto_tb0 (void)
1.1       root      678: {
1.1.1.4 ! root      679:     GOTO_TB(op_goto_tb0, PARAM1, 0);
1.1       root      680: }
                    681: 
1.1.1.4 ! root      682: void OPPROTO op_goto_tb1 (void)
1.1       root      683: {
1.1.1.4 ! root      684:     GOTO_TB(op_goto_tb1, PARAM1, 1);
1.1       root      685: }
                    686: 
1.1.1.4 ! root      687: void OPPROTO op_b_T1 (void)
1.1       root      688: {
1.1.1.4 ! root      689:     env->nip = (uint32_t)(T1 & ~3);
1.1       root      690:     RETURN();
                    691: }
                    692: 
1.1.1.4 ! root      693: #if defined (TARGET_PPC64)
        !           694: void OPPROTO op_b_T1_64 (void)
1.1       root      695: {
1.1.1.4 ! root      696:     env->nip = (uint64_t)(T1 & ~3);
1.1       root      697:     RETURN();
                    698: }
1.1.1.4 ! root      699: #endif
1.1       root      700: 
1.1.1.4 ! root      701: void OPPROTO op_jz_T0 (void)
1.1       root      702: {
1.1.1.4 ! root      703:     if (!T0)
        !           704:         GOTO_LABEL_PARAM(1);
1.1       root      705:     RETURN();
                    706: }
                    707: 
1.1.1.4 ! root      708: void OPPROTO op_btest_T1 (void)
1.1       root      709: {
1.1.1.4 ! root      710:     if (T0) {
        !           711:         env->nip = (uint32_t)(T1 & ~3);
1.1       root      712:     } else {
1.1.1.4 ! root      713:         env->nip = (uint32_t)PARAM1;
1.1       root      714:     }
                    715:     RETURN();
                    716: }
                    717: 
1.1.1.4 ! root      718: #if defined (TARGET_PPC64)
        !           719: void OPPROTO op_btest_T1_64 (void)
1.1       root      720: {
1.1.1.4 ! root      721:     if (T0) {
        !           722:         env->nip = (uint64_t)(T1 & ~3);
        !           723:     } else {
        !           724:         env->nip = ((uint64_t)PARAM1 << 32) | (uint64_t)PARAM2;
        !           725:     }
1.1       root      726:     RETURN();
                    727: }
1.1.1.4 ! root      728: #endif
1.1       root      729: 
1.1.1.4 ! root      730: void OPPROTO op_movl_T1_ctr (void)
1.1       root      731: {
1.1.1.4 ! root      732:     T1 = env->ctr;
1.1       root      733:     RETURN();
                    734: }
                    735: 
1.1.1.4 ! root      736: void OPPROTO op_movl_T1_lr (void)
1.1       root      737: {
1.1.1.4 ! root      738:     T1 = env->lr;
1.1       root      739:     RETURN();
                    740: }
                    741: 
1.1.1.4 ! root      742: /* tests with result in T0 */
        !           743: void OPPROTO op_test_ctr (void)
1.1       root      744: {
1.1.1.4 ! root      745:     T0 = (uint32_t)env->ctr;
1.1       root      746:     RETURN();
                    747: }
                    748: 
1.1.1.4 ! root      749: #if defined(TARGET_PPC64)
        !           750: void OPPROTO op_test_ctr_64 (void)
1.1       root      751: {
1.1.1.4 ! root      752:     T0 = (uint64_t)env->ctr;
1.1       root      753:     RETURN();
                    754: }
1.1.1.4 ! root      755: #endif
1.1       root      756: 
1.1.1.4 ! root      757: void OPPROTO op_test_ctr_true (void)
1.1       root      758: {
1.1.1.4 ! root      759:     T0 = ((uint32_t)env->ctr != 0 && (T0 & PARAM1) != 0);
1.1       root      760:     RETURN();
                    761: }
                    762: 
1.1.1.4 ! root      763: #if defined(TARGET_PPC64)
        !           764: void OPPROTO op_test_ctr_true_64 (void)
1.1       root      765: {
1.1.1.4 ! root      766:     T0 = ((uint64_t)env->ctr != 0 && (T0 & PARAM1) != 0);
1.1       root      767:     RETURN();
                    768: }
1.1.1.4 ! root      769: #endif
1.1       root      770: 
1.1.1.4 ! root      771: void OPPROTO op_test_ctr_false (void)
1.1       root      772: {
1.1.1.4 ! root      773:     T0 = ((uint32_t)env->ctr != 0 && (T0 & PARAM1) == 0);
1.1       root      774:     RETURN();
                    775: }
                    776: 
1.1.1.4 ! root      777: #if defined(TARGET_PPC64)
        !           778: void OPPROTO op_test_ctr_false_64 (void)
1.1       root      779: {
1.1.1.4 ! root      780:     T0 = ((uint64_t)env->ctr != 0 && (T0 & PARAM1) == 0);
1.1       root      781:     RETURN();
                    782: }
1.1.1.4 ! root      783: #endif
1.1       root      784: 
1.1.1.4 ! root      785: void OPPROTO op_test_ctrz (void)
1.1       root      786: {
1.1.1.4 ! root      787:     T0 = ((uint32_t)env->ctr == 0);
1.1       root      788:     RETURN();
                    789: }
                    790: 
1.1.1.4 ! root      791: #if defined(TARGET_PPC64)
        !           792: void OPPROTO op_test_ctrz_64 (void)
1.1       root      793: {
1.1.1.4 ! root      794:     T0 = ((uint64_t)env->ctr == 0);
1.1       root      795:     RETURN();
                    796: }
1.1.1.4 ! root      797: #endif
1.1       root      798: 
1.1.1.4 ! root      799: void OPPROTO op_test_ctrz_true (void)
1.1       root      800: {
1.1.1.4 ! root      801:     T0 = ((uint32_t)env->ctr == 0 && (T0 & PARAM1) != 0);
1.1       root      802:     RETURN();
                    803: }
                    804: 
1.1.1.4 ! root      805: #if defined(TARGET_PPC64)
        !           806: void OPPROTO op_test_ctrz_true_64 (void)
1.1       root      807: {
1.1.1.4 ! root      808:     T0 = ((uint64_t)env->ctr == 0 && (T0 & PARAM1) != 0);
1.1       root      809:     RETURN();
                    810: }
1.1.1.4 ! root      811: #endif
1.1       root      812: 
1.1.1.4 ! root      813: void OPPROTO op_test_ctrz_false (void)
1.1       root      814: {
1.1.1.4 ! root      815:     T0 = ((uint32_t)env->ctr == 0 && (T0 & PARAM1) == 0);
1.1       root      816:     RETURN();
                    817: }
                    818: 
1.1.1.4 ! root      819: #if defined(TARGET_PPC64)
        !           820: void OPPROTO op_test_ctrz_false_64 (void)
1.1       root      821: {
1.1.1.4 ! root      822:     T0 = ((uint64_t)env->ctr == 0 && (T0 & PARAM1) == 0);
1.1       root      823:     RETURN();
                    824: }
1.1.1.4 ! root      825: #endif
1.1       root      826: 
1.1.1.4 ! root      827: void OPPROTO op_test_true (void)
1.1       root      828: {
1.1.1.4 ! root      829:     T0 = (T0 & PARAM1);
1.1       root      830:     RETURN();
                    831: }
                    832: 
1.1.1.4 ! root      833: void OPPROTO op_test_false (void)
1.1       root      834: {
1.1.1.4 ! root      835:     T0 = ((T0 & PARAM1) == 0);
1.1       root      836:     RETURN();
                    837: }
                    838: 
1.1.1.4 ! root      839: /* CTR maintenance */
        !           840: void OPPROTO op_dec_ctr (void)
1.1       root      841: {
1.1.1.4 ! root      842:     env->ctr--;
1.1       root      843:     RETURN();
                    844: }
                    845: 
1.1.1.4 ! root      846: /***                           Integer arithmetic                          ***/
        !           847: /* add */
        !           848: void OPPROTO op_add (void)
1.1       root      849: {
1.1.1.4 ! root      850:     T0 += T1;
1.1       root      851:     RETURN();
                    852: }
                    853: 
1.1.1.4 ! root      854: void OPPROTO op_check_addo (void)
1.1       root      855: {
1.1.1.4 ! root      856:     xer_ov = (((uint32_t)T2 ^ (uint32_t)T1 ^ UINT32_MAX) &
        !           857:               ((uint32_t)T2 ^ (uint32_t)T0)) >> 31;
        !           858:     xer_so |= xer_ov;
1.1       root      859:     RETURN();
                    860: }
                    861: 
1.1.1.4 ! root      862: #if defined(TARGET_PPC64)
        !           863: void OPPROTO op_check_addo_64 (void)
1.1       root      864: {
1.1.1.4 ! root      865:     xer_ov = (((uint64_t)T2 ^ (uint64_t)T1 ^ UINT64_MAX) &
        !           866:               ((uint64_t)T2 ^ (uint64_t)T0)) >> 63;
        !           867:     xer_so |= xer_ov;
1.1       root      868:     RETURN();
                    869: }
1.1.1.4 ! root      870: #endif
1.1       root      871: 
1.1.1.4 ! root      872: /* add carrying */
        !           873: void OPPROTO op_check_addc (void)
1.1       root      874: {
1.1.1.4 ! root      875:     if (likely((uint32_t)T0 >= (uint32_t)T2)) {
        !           876:         xer_ca = 0;
1.1       root      877:     } else {
1.1.1.4 ! root      878:         xer_ca = 1;
1.1       root      879:     }
                    880:     RETURN();
                    881: }
                    882: 
1.1.1.4 ! root      883: #if defined(TARGET_PPC64)
        !           884: void OPPROTO op_check_addc_64 (void)
1.1       root      885: {
1.1.1.4 ! root      886:     if (likely((uint64_t)T0 >= (uint64_t)T2)) {
        !           887:         xer_ca = 0;
1.1       root      888:     } else {
1.1.1.4 ! root      889:         xer_ca = 1;
1.1       root      890:     }
                    891:     RETURN();
                    892: }
1.1.1.4 ! root      893: #endif
1.1       root      894: 
1.1.1.4 ! root      895: /* add extended */
        !           896: void OPPROTO op_adde (void)
1.1       root      897: {
1.1.1.4 ! root      898:     do_adde();
1.1       root      899:     RETURN();
                    900: }
                    901: 
1.1.1.4 ! root      902: #if defined(TARGET_PPC64)
        !           903: void OPPROTO op_adde_64 (void)
1.1       root      904: {
1.1.1.4 ! root      905:     do_adde_64();
1.1       root      906:     RETURN();
                    907: }
1.1.1.4 ! root      908: #endif
1.1       root      909: 
1.1.1.4 ! root      910: /* add immediate */
        !           911: void OPPROTO op_addi (void)
1.1       root      912: {
1.1.1.4 ! root      913:     T0 += (int32_t)PARAM1;
1.1       root      914:     RETURN();
                    915: }
                    916: 
1.1.1.4 ! root      917: /* add to minus one extended */
        !           918: void OPPROTO op_add_me (void)
1.1       root      919: {
1.1.1.4 ! root      920:     T0 += xer_ca + (-1);
        !           921:     if (likely((uint32_t)T1 != 0))
        !           922:         xer_ca = 1;
        !           923:     else
        !           924:         xer_ca = 0;
1.1       root      925:     RETURN();
                    926: }
                    927: 
1.1.1.4 ! root      928: #if defined(TARGET_PPC64)
        !           929: void OPPROTO op_add_me_64 (void)
1.1       root      930: {
1.1.1.4 ! root      931:     T0 += xer_ca + (-1);
        !           932:     if (likely((uint64_t)T1 != 0))
        !           933:         xer_ca = 1;
        !           934:     else
        !           935:         xer_ca = 0;
1.1       root      936:     RETURN();
                    937: }
1.1.1.4 ! root      938: #endif
1.1       root      939: 
1.1.1.4 ! root      940: void OPPROTO op_addmeo (void)
1.1       root      941: {
1.1.1.4 ! root      942:     do_addmeo();
1.1       root      943:     RETURN();
                    944: }
                    945: 
1.1.1.4 ! root      946: void OPPROTO op_addmeo_64 (void)
1.1       root      947: {
1.1.1.4 ! root      948:     do_addmeo();
1.1       root      949:     RETURN();
                    950: }
                    951: 
1.1.1.4 ! root      952: /* add to zero extended */
        !           953: void OPPROTO op_add_ze (void)
1.1       root      954: {
1.1.1.4 ! root      955:     T0 += xer_ca;
1.1       root      956:     RETURN();
                    957: }
                    958: 
1.1.1.4 ! root      959: /* divide word */
        !           960: void OPPROTO op_divw (void)
1.1       root      961: {
1.1.1.4 ! root      962:     if (unlikely(((int32_t)T0 == INT32_MIN && (int32_t)T1 == (int32_t)-1) ||
        !           963:                  (int32_t)T1 == 0)) {
        !           964:         T0 = (int32_t)(UINT32_MAX * ((uint32_t)T0 >> 31));
        !           965:     } else {
        !           966:         T0 = (int32_t)T0 / (int32_t)T1;
        !           967:     }
1.1       root      968:     RETURN();
                    969: }
                    970: 
1.1.1.4 ! root      971: #if defined(TARGET_PPC64)
        !           972: void OPPROTO op_divd (void)
1.1       root      973: {
1.1.1.4 ! root      974:     if (unlikely(((int64_t)T0 == INT64_MIN && (int64_t)T1 == (int64_t)-1LL) ||
        !           975:                  (int64_t)T1 == 0)) {
        !           976:         T0 = (int64_t)(UINT64_MAX * ((uint64_t)T0 >> 63));
        !           977:     } else {
        !           978:         T0 = (int64_t)T0 / (int64_t)T1;
        !           979:     }
1.1       root      980:     RETURN();
                    981: }
1.1.1.4 ! root      982: #endif
1.1       root      983: 
1.1.1.4 ! root      984: void OPPROTO op_divwo (void)
1.1       root      985: {
1.1.1.4 ! root      986:     do_divwo();
1.1       root      987:     RETURN();
                    988: }
                    989: 
1.1.1.4 ! root      990: #if defined(TARGET_PPC64)
        !           991: void OPPROTO op_divdo (void)
1.1       root      992: {
1.1.1.4 ! root      993:     do_divdo();
1.1       root      994:     RETURN();
                    995: }
1.1.1.4 ! root      996: #endif
1.1       root      997: 
1.1.1.4 ! root      998: /* divide word unsigned */
        !           999: void OPPROTO op_divwu (void)
1.1       root     1000: {
1.1.1.4 ! root     1001:     if (unlikely(T1 == 0)) {
        !          1002:         T0 = 0;
        !          1003:     } else {
        !          1004:         T0 = (uint32_t)T0 / (uint32_t)T1;
        !          1005:     }
1.1       root     1006:     RETURN();
                   1007: }
                   1008: 
1.1.1.4 ! root     1009: #if defined(TARGET_PPC64)
        !          1010: void OPPROTO op_divdu (void)
1.1       root     1011: {
1.1.1.4 ! root     1012:     if (unlikely(T1 == 0)) {
        !          1013:         T0 = 0;
        !          1014:     } else {
        !          1015:         T0 /= T1;
        !          1016:     }
1.1       root     1017:     RETURN();
                   1018: }
1.1.1.4 ! root     1019: #endif
1.1       root     1020: 
1.1.1.4 ! root     1021: void OPPROTO op_divwuo (void)
1.1       root     1022: {
1.1.1.4 ! root     1023:     do_divwuo();
1.1       root     1024:     RETURN();
                   1025: }
                   1026: 
1.1.1.4 ! root     1027: #if defined(TARGET_PPC64)
        !          1028: void OPPROTO op_divduo (void)
1.1       root     1029: {
1.1.1.4 ! root     1030:     do_divduo();
1.1       root     1031:     RETURN();
                   1032: }
1.1.1.4 ! root     1033: #endif
1.1       root     1034: 
1.1.1.4 ! root     1035: /* multiply high word */
        !          1036: void OPPROTO op_mulhw (void)
1.1       root     1037: {
1.1.1.4 ! root     1038:     T0 = ((int64_t)((int32_t)T0) * (int64_t)((int32_t)T1)) >> 32;
1.1       root     1039:     RETURN();
                   1040: }
                   1041: 
1.1.1.4 ! root     1042: #if defined(TARGET_PPC64)
        !          1043: void OPPROTO op_mulhd (void)
1.1       root     1044: {
1.1.1.4 ! root     1045:     uint64_t tl, th;
        !          1046: 
        !          1047:     muls64(&tl, &th, T0, T1);
        !          1048:     T0 = th;
1.1       root     1049:     RETURN();
                   1050: }
1.1.1.4 ! root     1051: #endif
1.1       root     1052: 
1.1.1.4 ! root     1053: /* multiply high word unsigned */
        !          1054: void OPPROTO op_mulhwu (void)
1.1       root     1055: {
1.1.1.4 ! root     1056:     T0 = ((uint64_t)(uint32_t)T0 * (uint64_t)(uint32_t)T1) >> 32;
1.1       root     1057:     RETURN();
                   1058: }
                   1059: 
1.1.1.4 ! root     1060: #if defined(TARGET_PPC64)
        !          1061: void OPPROTO op_mulhdu (void)
1.1       root     1062: {
1.1.1.4 ! root     1063:     uint64_t tl, th;
        !          1064: 
        !          1065:     mulu64(&tl, &th, T0, T1);
        !          1066:     T0 = th;
1.1       root     1067:     RETURN();
                   1068: }
1.1.1.4 ! root     1069: #endif
1.1       root     1070: 
1.1.1.4 ! root     1071: /* multiply low immediate */
        !          1072: void OPPROTO op_mulli (void)
1.1       root     1073: {
1.1.1.4 ! root     1074:     T0 = ((int32_t)T0 * (int32_t)PARAM1);
1.1       root     1075:     RETURN();
                   1076: }
                   1077: 
1.1.1.4 ! root     1078: /* multiply low word */
        !          1079: void OPPROTO op_mullw (void)
1.1       root     1080: {
1.1.1.4 ! root     1081:     T0 = (int32_t)(T0 * T1);
1.1       root     1082:     RETURN();
                   1083: }
                   1084: 
1.1.1.4 ! root     1085: #if defined(TARGET_PPC64)
        !          1086: void OPPROTO op_mulld (void)
1.1       root     1087: {
1.1.1.4 ! root     1088:     T0 *= T1;
1.1       root     1089:     RETURN();
                   1090: }
1.1.1.4 ! root     1091: #endif
1.1       root     1092: 
1.1.1.4 ! root     1093: void OPPROTO op_mullwo (void)
1.1       root     1094: {
1.1.1.4 ! root     1095:     do_mullwo();
        !          1096:     RETURN();
        !          1097: }
        !          1098: 
        !          1099: #if defined(TARGET_PPC64)
        !          1100: void OPPROTO op_mulldo (void)
        !          1101: {
        !          1102:     do_mulldo();
        !          1103:     RETURN();
        !          1104: }
        !          1105: #endif
        !          1106: 
        !          1107: /* negate */
        !          1108: void OPPROTO op_neg (void)
        !          1109: {
        !          1110:     if (likely(T0 != INT32_MIN)) {
        !          1111:         T0 = -(int32_t)T0;
1.1       root     1112:     }
                   1113:     RETURN();
                   1114: }
                   1115: 
1.1.1.4 ! root     1116: #if defined(TARGET_PPC64)
        !          1117: void OPPROTO op_neg_64 (void)
1.1       root     1118: {
1.1.1.4 ! root     1119:     if (likely(T0 != INT64_MIN)) {
        !          1120:         T0 = -(int64_t)T0;
1.1       root     1121:     }
                   1122:     RETURN();
                   1123: }
1.1.1.4 ! root     1124: #endif
1.1       root     1125: 
1.1.1.4 ! root     1126: void OPPROTO op_nego (void)
1.1       root     1127: {
1.1.1.4 ! root     1128:     do_nego();
1.1       root     1129:     RETURN();
                   1130: }
                   1131: 
1.1.1.4 ! root     1132: #if defined(TARGET_PPC64)
        !          1133: void OPPROTO op_nego_64 (void)
1.1       root     1134: {
1.1.1.4 ! root     1135:     do_nego_64();
1.1       root     1136:     RETURN();
                   1137: }
1.1.1.4 ! root     1138: #endif
1.1       root     1139: 
1.1.1.4 ! root     1140: /* subtract from */
        !          1141: void OPPROTO op_subf (void)
1.1       root     1142: {
1.1.1.4 ! root     1143:     T0 = T1 - T0;
1.1       root     1144:     RETURN();
                   1145: }
                   1146: 
1.1.1.4 ! root     1147: /* subtract from carrying */
        !          1148: void OPPROTO op_check_subfc (void)
1.1       root     1149: {
1.1.1.4 ! root     1150:     if (likely((uint32_t)T0 > (uint32_t)T1)) {
        !          1151:         xer_ca = 0;
        !          1152:     } else {
        !          1153:         xer_ca = 1;
        !          1154:     }
1.1       root     1155:     RETURN();
                   1156: }
                   1157: 
1.1.1.4 ! root     1158: #if defined(TARGET_PPC64)
        !          1159: void OPPROTO op_check_subfc_64 (void)
1.1       root     1160: {
1.1.1.4 ! root     1161:     if (likely((uint64_t)T0 > (uint64_t)T1)) {
        !          1162:         xer_ca = 0;
        !          1163:     } else {
        !          1164:         xer_ca = 1;
        !          1165:     }
1.1       root     1166:     RETURN();
                   1167: }
1.1.1.4 ! root     1168: #endif
1.1       root     1169: 
1.1.1.4 ! root     1170: /* subtract from extended */
        !          1171: void OPPROTO op_subfe (void)
1.1       root     1172: {
1.1.1.4 ! root     1173:     do_subfe();
1.1       root     1174:     RETURN();
                   1175: }
                   1176: 
1.1.1.4 ! root     1177: #if defined(TARGET_PPC64)
        !          1178: void OPPROTO op_subfe_64 (void)
1.1       root     1179: {
1.1.1.4 ! root     1180:     do_subfe_64();
1.1       root     1181:     RETURN();
                   1182: }
1.1.1.4 ! root     1183: #endif
1.1       root     1184: 
1.1.1.4 ! root     1185: /* subtract from immediate carrying */
        !          1186: void OPPROTO op_subfic (void)
1.1       root     1187: {
1.1.1.4 ! root     1188:     T0 = (int32_t)PARAM1 + ~T0 + 1;
        !          1189:     if ((uint32_t)T0 <= (uint32_t)PARAM1) {
        !          1190:         xer_ca = 1;
        !          1191:     } else {
        !          1192:         xer_ca = 0;
        !          1193:     }
1.1       root     1194:     RETURN();
                   1195: }
                   1196: 
1.1.1.4 ! root     1197: #if defined(TARGET_PPC64)
        !          1198: void OPPROTO op_subfic_64 (void)
1.1       root     1199: {
1.1.1.4 ! root     1200:     T0 = (int64_t)PARAM1 + ~T0 + 1;
        !          1201:     if ((uint64_t)T0 <= (uint64_t)PARAM1) {
        !          1202:         xer_ca = 1;
        !          1203:     } else {
        !          1204:         xer_ca = 0;
        !          1205:     }
1.1       root     1206:     RETURN();
                   1207: }
1.1.1.4 ! root     1208: #endif
1.1       root     1209: 
1.1.1.4 ! root     1210: /* subtract from minus one extended */
        !          1211: void OPPROTO op_subfme (void)
1.1       root     1212: {
1.1.1.4 ! root     1213:     T0 = ~T0 + xer_ca - 1;
        !          1214:     if (likely((uint32_t)T0 != UINT32_MAX))
        !          1215:         xer_ca = 1;
        !          1216:     else
        !          1217:         xer_ca = 0;
1.1       root     1218:     RETURN();
                   1219: }
                   1220: 
1.1.1.4 ! root     1221: #if defined(TARGET_PPC64)
        !          1222: void OPPROTO op_subfme_64 (void)
1.1       root     1223: {
1.1.1.4 ! root     1224:     T0 = ~T0 + xer_ca - 1;
        !          1225:     if (likely((uint64_t)T0 != UINT64_MAX))
        !          1226:         xer_ca = 1;
        !          1227:     else
        !          1228:         xer_ca = 0;
1.1       root     1229:     RETURN();
                   1230: }
1.1.1.4 ! root     1231: #endif
1.1       root     1232: 
1.1.1.4 ! root     1233: void OPPROTO op_subfmeo (void)
1.1       root     1234: {
1.1.1.4 ! root     1235:     do_subfmeo();
1.1       root     1236:     RETURN();
                   1237: }
                   1238: 
1.1.1.4 ! root     1239: #if defined(TARGET_PPC64)
        !          1240: void OPPROTO op_subfmeo_64 (void)
1.1       root     1241: {
1.1.1.4 ! root     1242:     do_subfmeo_64();
1.1       root     1243:     RETURN();
                   1244: }
1.1.1.4 ! root     1245: #endif
1.1       root     1246: 
1.1.1.4 ! root     1247: /* subtract from zero extended */
        !          1248: void OPPROTO op_subfze (void)
1.1       root     1249: {
1.1.1.4 ! root     1250:     T1 = ~T0;
        !          1251:     T0 = T1 + xer_ca;
        !          1252:     if ((uint32_t)T0 < (uint32_t)T1) {
        !          1253:         xer_ca = 1;
        !          1254:     } else {
        !          1255:         xer_ca = 0;
        !          1256:     }
1.1       root     1257:     RETURN();
                   1258: }
                   1259: 
1.1.1.4 ! root     1260: #if defined(TARGET_PPC64)
        !          1261: void OPPROTO op_subfze_64 (void)
1.1       root     1262: {
1.1.1.4 ! root     1263:     T1 = ~T0;
        !          1264:     T0 = T1 + xer_ca;
        !          1265:     if ((uint64_t)T0 < (uint64_t)T1) {
        !          1266:         xer_ca = 1;
        !          1267:     } else {
        !          1268:         xer_ca = 0;
        !          1269:     }
1.1       root     1270:     RETURN();
                   1271: }
1.1.1.4 ! root     1272: #endif
1.1       root     1273: 
1.1.1.4 ! root     1274: void OPPROTO op_subfzeo (void)
        !          1275: {
        !          1276:     do_subfzeo();
        !          1277:     RETURN();
        !          1278: }
1.1       root     1279: 
1.1.1.4 ! root     1280: #if defined(TARGET_PPC64)
        !          1281: void OPPROTO op_subfzeo_64 (void)
1.1       root     1282: {
1.1.1.4 ! root     1283:     do_subfzeo_64();
1.1       root     1284:     RETURN();
                   1285: }
1.1.1.4 ! root     1286: #endif
1.1       root     1287: 
1.1.1.4 ! root     1288: /***                           Integer comparison                          ***/
        !          1289: /* compare */
        !          1290: void OPPROTO op_cmp (void)
1.1       root     1291: {
1.1.1.4 ! root     1292:     if ((int32_t)T0 < (int32_t)T1) {
        !          1293:         T0 = 0x08;
        !          1294:     } else if ((int32_t)T0 > (int32_t)T1) {
        !          1295:         T0 = 0x04;
        !          1296:     } else {
        !          1297:         T0 = 0x02;
        !          1298:     }
        !          1299:     T0 |= xer_so;
1.1       root     1300:     RETURN();
                   1301: }
                   1302: 
1.1.1.4 ! root     1303: #if defined(TARGET_PPC64)
        !          1304: void OPPROTO op_cmp_64 (void)
1.1       root     1305: {
1.1.1.4 ! root     1306:     if ((int64_t)T0 < (int64_t)T1) {
        !          1307:         T0 = 0x08;
        !          1308:     } else if ((int64_t)T0 > (int64_t)T1) {
        !          1309:         T0 = 0x04;
        !          1310:     } else {
        !          1311:         T0 = 0x02;
        !          1312:     }
        !          1313:     T0 |= xer_so;
1.1       root     1314:     RETURN();
                   1315: }
1.1.1.4 ! root     1316: #endif
1.1       root     1317: 
1.1.1.4 ! root     1318: /* compare immediate */
        !          1319: void OPPROTO op_cmpi (void)
1.1       root     1320: {
1.1.1.4 ! root     1321:     if ((int32_t)T0 < (int32_t)PARAM1) {
        !          1322:         T0 = 0x08;
        !          1323:     } else if ((int32_t)T0 > (int32_t)PARAM1) {
        !          1324:         T0 = 0x04;
        !          1325:     } else {
        !          1326:         T0 = 0x02;
        !          1327:     }
        !          1328:     T0 |= xer_so;
1.1       root     1329:     RETURN();
                   1330: }
                   1331: 
1.1.1.4 ! root     1332: #if defined(TARGET_PPC64)
        !          1333: void OPPROTO op_cmpi_64 (void)
1.1       root     1334: {
1.1.1.4 ! root     1335:     if ((int64_t)T0 < (int64_t)((int32_t)PARAM1)) {
        !          1336:         T0 = 0x08;
        !          1337:     } else if ((int64_t)T0 > (int64_t)((int32_t)PARAM1)) {
        !          1338:         T0 = 0x04;
        !          1339:     } else {
        !          1340:         T0 = 0x02;
        !          1341:     }
        !          1342:     T0 |= xer_so;
1.1       root     1343:     RETURN();
                   1344: }
1.1.1.4 ! root     1345: #endif
1.1       root     1346: 
1.1.1.4 ! root     1347: /* compare logical */
        !          1348: void OPPROTO op_cmpl (void)
        !          1349: {
        !          1350:     if ((uint32_t)T0 < (uint32_t)T1) {
        !          1351:         T0 = 0x08;
        !          1352:     } else if ((uint32_t)T0 > (uint32_t)T1) {
        !          1353:         T0 = 0x04;
        !          1354:     } else {
        !          1355:         T0 = 0x02;
        !          1356:     }
        !          1357:     T0 |= xer_so;
        !          1358:     RETURN();
        !          1359: }
1.1       root     1360: 
1.1.1.4 ! root     1361: #if defined(TARGET_PPC64)
        !          1362: void OPPROTO op_cmpl_64 (void)
        !          1363: {
        !          1364:     if ((uint64_t)T0 < (uint64_t)T1) {
        !          1365:         T0 = 0x08;
        !          1366:     } else if ((uint64_t)T0 > (uint64_t)T1) {
        !          1367:         T0 = 0x04;
        !          1368:     } else {
        !          1369:         T0 = 0x02;
        !          1370:     }
        !          1371:     T0 |= xer_so;
        !          1372:     RETURN();
        !          1373: }
1.1       root     1374: #endif
                   1375: 
1.1.1.4 ! root     1376: /* compare logical immediate */
        !          1377: void OPPROTO op_cmpli (void)
1.1       root     1378: {
1.1.1.4 ! root     1379:     if ((uint32_t)T0 < (uint32_t)PARAM1) {
        !          1380:         T0 = 0x08;
        !          1381:     } else if ((uint32_t)T0 > (uint32_t)PARAM1) {
        !          1382:         T0 = 0x04;
        !          1383:     } else {
        !          1384:         T0 = 0x02;
        !          1385:     }
        !          1386:     T0 |= xer_so;
1.1       root     1387:     RETURN();
                   1388: }
                   1389: 
1.1.1.4 ! root     1390: #if defined(TARGET_PPC64)
        !          1391: void OPPROTO op_cmpli_64 (void)
1.1       root     1392: {
1.1.1.4 ! root     1393:     if ((uint64_t)T0 < (uint64_t)PARAM1) {
        !          1394:         T0 = 0x08;
        !          1395:     } else if ((uint64_t)T0 > (uint64_t)PARAM1) {
        !          1396:         T0 = 0x04;
        !          1397:     } else {
        !          1398:         T0 = 0x02;
        !          1399:     }
        !          1400:     T0 |= xer_so;
        !          1401:     RETURN();
        !          1402: }
        !          1403: #endif
        !          1404: 
        !          1405: void OPPROTO op_isel (void)
        !          1406: {
        !          1407:     if (T0)
        !          1408:         T0 = T1;
        !          1409:     else
        !          1410:         T0 = T2;
1.1       root     1411:     RETURN();
                   1412: }
                   1413: 
1.1.1.4 ! root     1414: void OPPROTO op_popcntb (void)
1.1       root     1415: {
1.1.1.4 ! root     1416:     do_popcntb();
1.1       root     1417:     RETURN();
                   1418: }
                   1419: 
1.1.1.4 ! root     1420: #if defined(TARGET_PPC64)
        !          1421: void OPPROTO op_popcntb_64 (void)
1.1       root     1422: {
1.1.1.4 ! root     1423:     do_popcntb_64();
1.1       root     1424:     RETURN();
                   1425: }
1.1.1.4 ! root     1426: #endif
1.1       root     1427: 
1.1.1.4 ! root     1428: /***                            Integer logical                            ***/
        !          1429: /* and */
        !          1430: void OPPROTO op_and (void)
1.1       root     1431: {
1.1.1.4 ! root     1432:     T0 &= T1;
1.1       root     1433:     RETURN();
                   1434: }
                   1435: 
1.1.1.4 ! root     1436: /* andc */
        !          1437: void OPPROTO op_andc (void)
1.1       root     1438: {
1.1.1.4 ! root     1439:     T0 &= ~T1;
1.1       root     1440:     RETURN();
                   1441: }
                   1442: 
1.1.1.4 ! root     1443: /* andi. */
        !          1444: void OPPROTO op_andi_T0 (void)
1.1       root     1445: {
1.1.1.4 ! root     1446:     T0 &= (uint32_t)PARAM1;
1.1       root     1447:     RETURN();
                   1448: }
                   1449: 
1.1.1.4 ! root     1450: void OPPROTO op_andi_T1 (void)
1.1       root     1451: {
1.1.1.4 ! root     1452:     T1 &= (uint32_t)PARAM1;
        !          1453:     RETURN();
        !          1454: }
        !          1455: 
        !          1456: #if defined(TARGET_PPC64)
        !          1457: void OPPROTO op_andi_T0_64 (void)
        !          1458: {
        !          1459:     T0 &= ((uint64_t)PARAM1 << 32) | (uint64_t)PARAM2;
        !          1460:     RETURN();
        !          1461: }
        !          1462: 
        !          1463: void OPPROTO op_andi_T1_64 (void)
        !          1464: {
        !          1465:     T1 &= ((uint64_t)PARAM1 << 32) | (uint64_t)PARAM2;
        !          1466:     RETURN();
        !          1467: }
        !          1468: #endif
        !          1469: 
        !          1470: /* count leading zero */
        !          1471: void OPPROTO op_cntlzw (void)
        !          1472: {
        !          1473:     do_cntlzw();
        !          1474:     RETURN();
        !          1475: }
        !          1476: 
        !          1477: #if defined(TARGET_PPC64)
        !          1478: void OPPROTO op_cntlzd (void)
        !          1479: {
        !          1480:     do_cntlzd();
        !          1481:     RETURN();
        !          1482: }
        !          1483: #endif
        !          1484: 
        !          1485: /* eqv */
        !          1486: void OPPROTO op_eqv (void)
        !          1487: {
        !          1488:     T0 = ~(T0 ^ T1);
        !          1489:     RETURN();
        !          1490: }
        !          1491: 
        !          1492: /* extend sign byte */
        !          1493: void OPPROTO op_extsb (void)
        !          1494: {
        !          1495: #if defined (TARGET_PPC64)
        !          1496:     T0 = (int64_t)((int8_t)T0);
        !          1497: #else
        !          1498:     T0 = (int32_t)((int8_t)T0);
        !          1499: #endif
        !          1500:     RETURN();
        !          1501: }
        !          1502: 
        !          1503: /* extend sign half word */
        !          1504: void OPPROTO op_extsh (void)
        !          1505: {
        !          1506: #if defined (TARGET_PPC64)
        !          1507:     T0 = (int64_t)((int16_t)T0);
        !          1508: #else
        !          1509:     T0 = (int32_t)((int16_t)T0);
        !          1510: #endif
        !          1511:     RETURN();
        !          1512: }
        !          1513: 
        !          1514: #if defined (TARGET_PPC64)
        !          1515: void OPPROTO op_extsw (void)
        !          1516: {
        !          1517:     T0 = (int64_t)((int32_t)T0);
        !          1518:     RETURN();
        !          1519: }
        !          1520: #endif
        !          1521: 
        !          1522: /* nand */
        !          1523: void OPPROTO op_nand (void)
        !          1524: {
        !          1525:     T0 = ~(T0 & T1);
        !          1526:     RETURN();
        !          1527: }
        !          1528: 
        !          1529: /* nor */
        !          1530: void OPPROTO op_nor (void)
        !          1531: {
        !          1532:     T0 = ~(T0 | T1);
        !          1533:     RETURN();
        !          1534: }
        !          1535: 
        !          1536: /* or */
        !          1537: void OPPROTO op_or (void)
        !          1538: {
        !          1539:     T0 |= T1;
        !          1540:     RETURN();
        !          1541: }
        !          1542: 
        !          1543: /* orc */
        !          1544: void OPPROTO op_orc (void)
        !          1545: {
        !          1546:     T0 |= ~T1;
        !          1547:     RETURN();
        !          1548: }
        !          1549: 
        !          1550: /* ori */
        !          1551: void OPPROTO op_ori (void)
        !          1552: {
        !          1553:     T0 |= (uint32_t)PARAM1;
        !          1554:     RETURN();
        !          1555: }
        !          1556: 
        !          1557: /* xor */
        !          1558: void OPPROTO op_xor (void)
        !          1559: {
        !          1560:     T0 ^= T1;
        !          1561:     RETURN();
        !          1562: }
        !          1563: 
        !          1564: /* xori */
        !          1565: void OPPROTO op_xori (void)
        !          1566: {
        !          1567:     T0 ^= (uint32_t)PARAM1;
        !          1568:     RETURN();
        !          1569: }
        !          1570: 
        !          1571: /***                             Integer rotate                            ***/
        !          1572: void OPPROTO op_rotl32_T0_T1 (void)
        !          1573: {
        !          1574:     T0 = rotl32(T0, T1 & 0x1F);
        !          1575:     RETURN();
        !          1576: }
        !          1577: 
        !          1578: void OPPROTO op_rotli32_T0 (void)
        !          1579: {
        !          1580:     T0 = rotl32(T0, PARAM1);
        !          1581:     RETURN();
        !          1582: }
        !          1583: 
        !          1584: #if defined(TARGET_PPC64)
        !          1585: void OPPROTO op_rotl64_T0_T1 (void)
        !          1586: {
        !          1587:     T0 = rotl64(T0, T1 & 0x3F);
        !          1588:     RETURN();
        !          1589: }
        !          1590: 
        !          1591: void OPPROTO op_rotli64_T0 (void)
        !          1592: {
        !          1593:     T0 = rotl64(T0, PARAM1);
        !          1594:     RETURN();
        !          1595: }
        !          1596: #endif
        !          1597: 
        !          1598: /***                             Integer shift                             ***/
        !          1599: /* shift left word */
        !          1600: void OPPROTO op_slw (void)
        !          1601: {
        !          1602:     if (T1 & 0x20) {
        !          1603:         T0 = 0;
        !          1604:     } else {
        !          1605:         T0 = (uint32_t)(T0 << T1);
        !          1606:     }
        !          1607:     RETURN();
        !          1608: }
        !          1609: 
        !          1610: #if defined(TARGET_PPC64)
        !          1611: void OPPROTO op_sld (void)
        !          1612: {
        !          1613:     if (T1 & 0x40) {
        !          1614:         T0 = 0;
        !          1615:     } else {
        !          1616:         T0 = T0 << T1;
        !          1617:     }
        !          1618:     RETURN();
        !          1619: }
        !          1620: #endif
        !          1621: 
        !          1622: /* shift right algebraic word */
        !          1623: void OPPROTO op_sraw (void)
        !          1624: {
        !          1625:     do_sraw();
        !          1626:     RETURN();
        !          1627: }
        !          1628: 
        !          1629: #if defined(TARGET_PPC64)
        !          1630: void OPPROTO op_srad (void)
        !          1631: {
        !          1632:     do_srad();
        !          1633:     RETURN();
        !          1634: }
        !          1635: #endif
        !          1636: 
        !          1637: /* shift right algebraic word immediate */
        !          1638: void OPPROTO op_srawi (void)
        !          1639: {
        !          1640:     uint32_t mask = (uint32_t)PARAM2;
        !          1641: 
        !          1642:     T0 = (int32_t)T0 >> PARAM1;
        !          1643:     if ((int32_t)T1 < 0 && (T1 & mask) != 0) {
        !          1644:         xer_ca = 1;
        !          1645:     } else {
        !          1646:         xer_ca = 0;
        !          1647:     }
        !          1648:     RETURN();
        !          1649: }
        !          1650: 
        !          1651: #if defined(TARGET_PPC64)
        !          1652: void OPPROTO op_sradi (void)
        !          1653: {
        !          1654:     uint64_t mask = ((uint64_t)PARAM2 << 32) | (uint64_t)PARAM3;
        !          1655: 
        !          1656:     T0 = (int64_t)T0 >> PARAM1;
        !          1657:     if ((int64_t)T1 < 0 && ((uint64_t)T1 & mask) != 0) {
        !          1658:         xer_ca = 1;
        !          1659:     } else {
        !          1660:         xer_ca = 0;
        !          1661:     }
        !          1662:     RETURN();
        !          1663: }
        !          1664: #endif
        !          1665: 
        !          1666: /* shift right word */
        !          1667: void OPPROTO op_srw (void)
        !          1668: {
        !          1669:     if (T1 & 0x20) {
        !          1670:         T0 = 0;
        !          1671:     } else {
        !          1672:         T0 = (uint32_t)T0 >> T1;
        !          1673:     }
        !          1674:     RETURN();
        !          1675: }
        !          1676: 
        !          1677: #if defined(TARGET_PPC64)
        !          1678: void OPPROTO op_srd (void)
        !          1679: {
        !          1680:     if (T1 & 0x40) {
        !          1681:         T0 = 0;
        !          1682:     } else {
        !          1683:         T0 = (uint64_t)T0 >> T1;
        !          1684:     }
        !          1685:     RETURN();
        !          1686: }
        !          1687: #endif
        !          1688: 
        !          1689: void OPPROTO op_sl_T0_T1 (void)
        !          1690: {
        !          1691:     T0 = T0 << T1;
        !          1692:     RETURN();
        !          1693: }
        !          1694: 
        !          1695: void OPPROTO op_sli_T0 (void)
        !          1696: {
        !          1697:     T0 = T0 << PARAM1;
        !          1698:     RETURN();
        !          1699: }
        !          1700: 
        !          1701: void OPPROTO op_sli_T1 (void)
        !          1702: {
        !          1703:     T1 = T1 << PARAM1;
        !          1704:     RETURN();
        !          1705: }
        !          1706: 
        !          1707: void OPPROTO op_srl_T0_T1 (void)
        !          1708: {
        !          1709:     T0 = (uint32_t)T0 >> T1;
        !          1710:     RETURN();
        !          1711: }
        !          1712: 
        !          1713: #if defined(TARGET_PPC64)
        !          1714: void OPPROTO op_srl_T0_T1_64 (void)
        !          1715: {
        !          1716:     T0 = (uint32_t)T0 >> T1;
        !          1717:     RETURN();
        !          1718: }
        !          1719: #endif
        !          1720: 
        !          1721: void OPPROTO op_srli_T0 (void)
        !          1722: {
        !          1723:     T0 = (uint32_t)T0 >> PARAM1;
        !          1724:     RETURN();
        !          1725: }
        !          1726: 
        !          1727: #if defined(TARGET_PPC64)
        !          1728: void OPPROTO op_srli_T0_64 (void)
        !          1729: {
        !          1730:     T0 = (uint64_t)T0 >> PARAM1;
        !          1731:     RETURN();
        !          1732: }
        !          1733: #endif
        !          1734: 
        !          1735: void OPPROTO op_srli_T1 (void)
        !          1736: {
        !          1737:     T1 = (uint32_t)T1 >> PARAM1;
        !          1738:     RETURN();
        !          1739: }
        !          1740: 
        !          1741: #if defined(TARGET_PPC64)
        !          1742: void OPPROTO op_srli_T1_64 (void)
        !          1743: {
        !          1744:     T1 = (uint64_t)T1 >> PARAM1;
        !          1745:     RETURN();
        !          1746: }
        !          1747: #endif
        !          1748: 
        !          1749: /***                       Floating-Point arithmetic                       ***/
        !          1750: /* fadd - fadd. */
        !          1751: void OPPROTO op_fadd (void)
        !          1752: {
        !          1753: #if USE_PRECISE_EMULATION
        !          1754:     do_fadd();
        !          1755: #else
        !          1756:     FT0 = float64_add(FT0, FT1, &env->fp_status);
        !          1757: #endif
        !          1758:     RETURN();
        !          1759: }
        !          1760: 
        !          1761: /* fsub - fsub. */
        !          1762: void OPPROTO op_fsub (void)
        !          1763: {
        !          1764: #if USE_PRECISE_EMULATION
        !          1765:     do_fsub();
        !          1766: #else
        !          1767:     FT0 = float64_sub(FT0, FT1, &env->fp_status);
        !          1768: #endif
        !          1769:     RETURN();
        !          1770: }
        !          1771: 
        !          1772: /* fmul - fmul. */
        !          1773: void OPPROTO op_fmul (void)
        !          1774: {
        !          1775: #if USE_PRECISE_EMULATION
        !          1776:     do_fmul();
        !          1777: #else
        !          1778:     FT0 = float64_mul(FT0, FT1, &env->fp_status);
        !          1779: #endif
        !          1780:     RETURN();
        !          1781: }
        !          1782: 
        !          1783: /* fdiv - fdiv. */
        !          1784: void OPPROTO op_fdiv (void)
        !          1785: {
        !          1786: #if USE_PRECISE_EMULATION
        !          1787:     do_fdiv();
        !          1788: #else
        !          1789:     FT0 = float64_div(FT0, FT1, &env->fp_status);
        !          1790: #endif
        !          1791:     RETURN();
        !          1792: }
        !          1793: 
        !          1794: /* fsqrt - fsqrt. */
        !          1795: void OPPROTO op_fsqrt (void)
        !          1796: {
        !          1797:     do_fsqrt();
        !          1798:     RETURN();
        !          1799: }
        !          1800: 
        !          1801: /* fre - fre. */
        !          1802: void OPPROTO op_fre (void)
        !          1803: {
        !          1804:     do_fre();
        !          1805:     RETURN();
        !          1806: }
        !          1807: 
        !          1808: /* fres - fres. */
        !          1809: void OPPROTO op_fres (void)
        !          1810: {
        !          1811:     do_fres();
        !          1812:     RETURN();
        !          1813: }
        !          1814: 
        !          1815: /* frsqrte  - frsqrte. */
        !          1816: void OPPROTO op_frsqrte (void)
        !          1817: {
        !          1818:     do_frsqrte();
        !          1819:     RETURN();
        !          1820: }
        !          1821: 
        !          1822: /* fsel - fsel. */
        !          1823: void OPPROTO op_fsel (void)
        !          1824: {
        !          1825:     do_fsel();
        !          1826:     RETURN();
        !          1827: }
        !          1828: 
        !          1829: /***                     Floating-Point multiply-and-add                   ***/
        !          1830: /* fmadd - fmadd. */
        !          1831: void OPPROTO op_fmadd (void)
        !          1832: {
        !          1833: #if USE_PRECISE_EMULATION
        !          1834:     do_fmadd();
        !          1835: #else
        !          1836:     FT0 = float64_mul(FT0, FT1, &env->fp_status);
        !          1837:     FT0 = float64_add(FT0, FT2, &env->fp_status);
        !          1838: #endif
        !          1839:     RETURN();
        !          1840: }
        !          1841: 
        !          1842: /* fmsub - fmsub. */
        !          1843: void OPPROTO op_fmsub (void)
        !          1844: {
        !          1845: #if USE_PRECISE_EMULATION
        !          1846:     do_fmsub();
        !          1847: #else
        !          1848:     FT0 = float64_mul(FT0, FT1, &env->fp_status);
        !          1849:     FT0 = float64_sub(FT0, FT2, &env->fp_status);
        !          1850: #endif
        !          1851:     RETURN();
        !          1852: }
        !          1853: 
        !          1854: /* fnmadd - fnmadd. - fnmadds - fnmadds. */
        !          1855: void OPPROTO op_fnmadd (void)
        !          1856: {
        !          1857:     do_fnmadd();
        !          1858:     RETURN();
        !          1859: }
        !          1860: 
        !          1861: /* fnmsub - fnmsub. */
        !          1862: void OPPROTO op_fnmsub (void)
        !          1863: {
        !          1864:     do_fnmsub();
        !          1865:     RETURN();
        !          1866: }
        !          1867: 
        !          1868: /***                     Floating-Point round & convert                    ***/
        !          1869: /* frsp - frsp. */
        !          1870: void OPPROTO op_frsp (void)
        !          1871: {
        !          1872: #if USE_PRECISE_EMULATION
        !          1873:     do_frsp();
        !          1874: #else
        !          1875:     FT0 = float64_to_float32(FT0, &env->fp_status);
        !          1876: #endif
        !          1877:     RETURN();
        !          1878: }
        !          1879: 
        !          1880: /* fctiw - fctiw. */
        !          1881: void OPPROTO op_fctiw (void)
        !          1882: {
        !          1883:     do_fctiw();
        !          1884:     RETURN();
        !          1885: }
        !          1886: 
        !          1887: /* fctiwz - fctiwz. */
        !          1888: void OPPROTO op_fctiwz (void)
        !          1889: {
        !          1890:     do_fctiwz();
        !          1891:     RETURN();
        !          1892: }
        !          1893: 
        !          1894: #if defined(TARGET_PPC64)
        !          1895: /* fcfid - fcfid. */
        !          1896: void OPPROTO op_fcfid (void)
        !          1897: {
        !          1898:     do_fcfid();
        !          1899:     RETURN();
        !          1900: }
        !          1901: 
        !          1902: /* fctid - fctid. */
        !          1903: void OPPROTO op_fctid (void)
        !          1904: {
        !          1905:     do_fctid();
        !          1906:     RETURN();
        !          1907: }
        !          1908: 
        !          1909: /* fctidz - fctidz. */
        !          1910: void OPPROTO op_fctidz (void)
        !          1911: {
        !          1912:     do_fctidz();
        !          1913:     RETURN();
        !          1914: }
        !          1915: #endif
        !          1916: 
        !          1917: void OPPROTO op_frin (void)
        !          1918: {
        !          1919:     do_frin();
        !          1920:     RETURN();
        !          1921: }
        !          1922: 
        !          1923: void OPPROTO op_friz (void)
        !          1924: {
        !          1925:     do_friz();
        !          1926:     RETURN();
        !          1927: }
        !          1928: 
        !          1929: void OPPROTO op_frip (void)
        !          1930: {
        !          1931:     do_frip();
        !          1932:     RETURN();
        !          1933: }
        !          1934: 
        !          1935: void OPPROTO op_frim (void)
        !          1936: {
        !          1937:     do_frim();
        !          1938:     RETURN();
        !          1939: }
        !          1940: 
        !          1941: /***                         Floating-Point compare                        ***/
        !          1942: /* fcmpu */
        !          1943: void OPPROTO op_fcmpu (void)
        !          1944: {
        !          1945:     do_fcmpu();
        !          1946:     RETURN();
        !          1947: }
        !          1948: 
        !          1949: /* fcmpo */
        !          1950: void OPPROTO op_fcmpo (void)
        !          1951: {
        !          1952:     do_fcmpo();
        !          1953:     RETURN();
        !          1954: }
        !          1955: 
        !          1956: /***                         Floating-point move                           ***/
        !          1957: /* fabs */
        !          1958: void OPPROTO op_fabs (void)
        !          1959: {
        !          1960:     FT0 = float64_abs(FT0);
        !          1961:     RETURN();
        !          1962: }
        !          1963: 
        !          1964: /* fnabs */
        !          1965: void OPPROTO op_fnabs (void)
        !          1966: {
        !          1967:     FT0 = float64_abs(FT0);
        !          1968:     FT0 = float64_chs(FT0);
        !          1969:     RETURN();
        !          1970: }
        !          1971: 
        !          1972: /* fneg */
        !          1973: void OPPROTO op_fneg (void)
        !          1974: {
        !          1975:     FT0 = float64_chs(FT0);
        !          1976:     RETURN();
        !          1977: }
        !          1978: 
        !          1979: /* Load and store */
        !          1980: #define MEMSUFFIX _raw
        !          1981: #include "op_helper.h"
        !          1982: #include "op_mem.h"
        !          1983: #if !defined(CONFIG_USER_ONLY)
        !          1984: #define MEMSUFFIX _user
        !          1985: #include "op_helper.h"
        !          1986: #include "op_mem.h"
        !          1987: #define MEMSUFFIX _kernel
        !          1988: #include "op_helper.h"
        !          1989: #include "op_mem.h"
        !          1990: #define MEMSUFFIX _hypv
        !          1991: #include "op_helper.h"
        !          1992: #include "op_mem.h"
        !          1993: #endif
        !          1994: 
        !          1995: /* Special op to check and maybe clear reservation */
        !          1996: void OPPROTO op_check_reservation (void)
        !          1997: {
        !          1998:     if ((uint32_t)env->reserve == (uint32_t)(T0 & ~0x00000003))
        !          1999:         env->reserve = (target_ulong)-1ULL;
        !          2000:     RETURN();
        !          2001: }
        !          2002: 
        !          2003: #if defined(TARGET_PPC64)
        !          2004: void OPPROTO op_check_reservation_64 (void)
        !          2005: {
        !          2006:     if ((uint64_t)env->reserve == (uint64_t)(T0 & ~0x00000003))
        !          2007:         env->reserve = (target_ulong)-1ULL;
        !          2008:     RETURN();
        !          2009: }
        !          2010: #endif
        !          2011: 
        !          2012: void OPPROTO op_wait (void)
        !          2013: {
        !          2014:     env->halted = 1;
        !          2015:     RETURN();
        !          2016: }
        !          2017: 
        !          2018: /* Return from interrupt */
        !          2019: #if !defined(CONFIG_USER_ONLY)
        !          2020: void OPPROTO op_rfi (void)
        !          2021: {
        !          2022:     do_rfi();
        !          2023:     RETURN();
        !          2024: }
        !          2025: 
        !          2026: #if defined(TARGET_PPC64)
        !          2027: void OPPROTO op_rfid (void)
        !          2028: {
        !          2029:     do_rfid();
        !          2030:     RETURN();
        !          2031: }
        !          2032: 
        !          2033: void OPPROTO op_hrfid (void)
        !          2034: {
        !          2035:     do_hrfid();
        !          2036:     RETURN();
        !          2037: }
        !          2038: #endif
        !          2039: 
        !          2040: /* Exception vectors */
        !          2041: void OPPROTO op_store_excp_prefix (void)
        !          2042: {
        !          2043:     T0 &= env->ivpr_mask;
        !          2044:     env->excp_prefix = T0;
        !          2045:     RETURN();
        !          2046: }
        !          2047: 
        !          2048: void OPPROTO op_store_excp_vector (void)
        !          2049: {
        !          2050:     T0 &= env->ivor_mask;
        !          2051:     env->excp_vectors[PARAM1] = T0;
        !          2052:     RETURN();
        !          2053: }
        !          2054: #endif
        !          2055: 
        !          2056: /* Trap word */
        !          2057: void OPPROTO op_tw (void)
        !          2058: {
        !          2059:     do_tw(PARAM1);
        !          2060:     RETURN();
        !          2061: }
        !          2062: 
        !          2063: #if defined(TARGET_PPC64)
        !          2064: void OPPROTO op_td (void)
        !          2065: {
        !          2066:     do_td(PARAM1);
        !          2067:     RETURN();
        !          2068: }
        !          2069: #endif
        !          2070: 
        !          2071: #if !defined(CONFIG_USER_ONLY)
        !          2072: /* tlbia */
        !          2073: void OPPROTO op_tlbia (void)
        !          2074: {
        !          2075:     ppc_tlb_invalidate_all(env);
        !          2076:     RETURN();
        !          2077: }
        !          2078: 
        !          2079: /* tlbie */
        !          2080: void OPPROTO op_tlbie (void)
        !          2081: {
        !          2082:     ppc_tlb_invalidate_one(env, (uint32_t)T0);
        !          2083:     RETURN();
        !          2084: }
        !          2085: 
        !          2086: #if defined(TARGET_PPC64)
        !          2087: void OPPROTO op_tlbie_64 (void)
        !          2088: {
        !          2089:     ppc_tlb_invalidate_one(env, T0);
        !          2090:     RETURN();
        !          2091: }
        !          2092: #endif
        !          2093: 
        !          2094: #if defined(TARGET_PPC64)
        !          2095: void OPPROTO op_slbia (void)
        !          2096: {
        !          2097:     ppc_slb_invalidate_all(env);
        !          2098:     RETURN();
        !          2099: }
        !          2100: 
        !          2101: void OPPROTO op_slbie (void)
        !          2102: {
        !          2103:     ppc_slb_invalidate_one(env, (uint32_t)T0);
        !          2104:     RETURN();
        !          2105: }
        !          2106: 
        !          2107: void OPPROTO op_slbie_64 (void)
        !          2108: {
        !          2109:     ppc_slb_invalidate_one(env, T0);
        !          2110:     RETURN();
        !          2111: }
        !          2112: #endif
        !          2113: #endif
        !          2114: 
        !          2115: #if !defined(CONFIG_USER_ONLY)
        !          2116: /* PowerPC 602/603/755 software TLB load instructions */
        !          2117: void OPPROTO op_6xx_tlbld (void)
        !          2118: {
        !          2119:     do_load_6xx_tlb(0);
        !          2120:     RETURN();
        !          2121: }
        !          2122: 
        !          2123: void OPPROTO op_6xx_tlbli (void)
        !          2124: {
        !          2125:     do_load_6xx_tlb(1);
        !          2126:     RETURN();
        !          2127: }
        !          2128: 
        !          2129: /* PowerPC 74xx software TLB load instructions */
        !          2130: void OPPROTO op_74xx_tlbld (void)
        !          2131: {
        !          2132:     do_load_74xx_tlb(0);
        !          2133:     RETURN();
        !          2134: }
        !          2135: 
        !          2136: void OPPROTO op_74xx_tlbli (void)
        !          2137: {
        !          2138:     do_load_74xx_tlb(1);
        !          2139:     RETURN();
        !          2140: }
        !          2141: #endif
        !          2142: 
        !          2143: /* 601 specific */
        !          2144: void OPPROTO op_load_601_rtcl (void)
        !          2145: {
        !          2146:     T0 = cpu_ppc601_load_rtcl(env);
        !          2147:     RETURN();
        !          2148: }
        !          2149: 
        !          2150: void OPPROTO op_load_601_rtcu (void)
        !          2151: {
        !          2152:     T0 = cpu_ppc601_load_rtcu(env);
        !          2153:     RETURN();
        !          2154: }
        !          2155: 
        !          2156: #if !defined(CONFIG_USER_ONLY)
        !          2157: void OPPROTO op_store_601_rtcl (void)
        !          2158: {
        !          2159:     cpu_ppc601_store_rtcl(env, T0);
        !          2160:     RETURN();
        !          2161: }
        !          2162: 
        !          2163: void OPPROTO op_store_601_rtcu (void)
        !          2164: {
        !          2165:     cpu_ppc601_store_rtcu(env, T0);
        !          2166:     RETURN();
        !          2167: }
        !          2168: 
        !          2169: void OPPROTO op_store_hid0_601 (void)
        !          2170: {
        !          2171:     do_store_hid0_601();
        !          2172:     RETURN();
        !          2173: }
        !          2174: 
        !          2175: void OPPROTO op_load_601_bat (void)
        !          2176: {
        !          2177:     T0 = env->IBAT[PARAM1][PARAM2];
        !          2178:     RETURN();
        !          2179: }
        !          2180: 
        !          2181: void OPPROTO op_store_601_batl (void)
        !          2182: {
        !          2183:     do_store_ibatl_601(env, PARAM1, T0);
        !          2184:     RETURN();
        !          2185: }
        !          2186: 
        !          2187: void OPPROTO op_store_601_batu (void)
        !          2188: {
        !          2189:     do_store_ibatu_601(env, PARAM1, T0);
        !          2190:     RETURN();
        !          2191: }
        !          2192: #endif /* !defined(CONFIG_USER_ONLY) */
        !          2193: 
        !          2194: /* PowerPC 601 specific instructions (POWER bridge) */
        !          2195: /* XXX: those micro-ops need tests ! */
        !          2196: void OPPROTO op_POWER_abs (void)
        !          2197: {
        !          2198:     if ((int32_t)T0 == INT32_MIN)
        !          2199:         T0 = INT32_MAX;
        !          2200:     else if ((int32_t)T0 < 0)
        !          2201:         T0 = -T0;
        !          2202:     RETURN();
        !          2203: }
        !          2204: 
        !          2205: void OPPROTO op_POWER_abso (void)
        !          2206: {
        !          2207:     do_POWER_abso();
        !          2208:     RETURN();
        !          2209: }
        !          2210: 
        !          2211: void OPPROTO op_POWER_clcs (void)
        !          2212: {
        !          2213:     do_POWER_clcs();
        !          2214:     RETURN();
        !          2215: }
        !          2216: 
        !          2217: void OPPROTO op_POWER_div (void)
        !          2218: {
        !          2219:     do_POWER_div();
        !          2220:     RETURN();
        !          2221: }
        !          2222: 
        !          2223: void OPPROTO op_POWER_divo (void)
        !          2224: {
        !          2225:     do_POWER_divo();
        !          2226:     RETURN();
        !          2227: }
        !          2228: 
        !          2229: void OPPROTO op_POWER_divs (void)
        !          2230: {
        !          2231:     do_POWER_divs();
        !          2232:     RETURN();
        !          2233: }
        !          2234: 
        !          2235: void OPPROTO op_POWER_divso (void)
        !          2236: {
        !          2237:     do_POWER_divso();
        !          2238:     RETURN();
        !          2239: }
        !          2240: 
        !          2241: void OPPROTO op_POWER_doz (void)
        !          2242: {
        !          2243:     if ((int32_t)T1 > (int32_t)T0)
        !          2244:         T0 = T1 - T0;
        !          2245:     else
        !          2246:         T0 = 0;
        !          2247:     RETURN();
        !          2248: }
        !          2249: 
        !          2250: void OPPROTO op_POWER_dozo (void)
        !          2251: {
        !          2252:     do_POWER_dozo();
        !          2253:     RETURN();
        !          2254: }
        !          2255: 
        !          2256: void OPPROTO op_load_xer_cmp (void)
        !          2257: {
        !          2258:     T2 = xer_cmp;
        !          2259:     RETURN();
        !          2260: }
        !          2261: 
        !          2262: void OPPROTO op_POWER_maskg (void)
        !          2263: {
        !          2264:     do_POWER_maskg();
        !          2265:     RETURN();
        !          2266: }
        !          2267: 
        !          2268: void OPPROTO op_POWER_maskir (void)
        !          2269: {
        !          2270:     T0 = (T0 & ~T2) | (T1 & T2);
        !          2271:     RETURN();
        !          2272: }
        !          2273: 
        !          2274: void OPPROTO op_POWER_mul (void)
        !          2275: {
        !          2276:     uint64_t tmp;
        !          2277: 
        !          2278:     tmp = (uint64_t)T0 * (uint64_t)T1;
        !          2279:     env->spr[SPR_MQ] = tmp >> 32;
        !          2280:     T0 = tmp;
        !          2281:     RETURN();
        !          2282: }
        !          2283: 
        !          2284: void OPPROTO op_POWER_mulo (void)
        !          2285: {
        !          2286:     do_POWER_mulo();
        !          2287:     RETURN();
        !          2288: }
        !          2289: 
        !          2290: void OPPROTO op_POWER_nabs (void)
        !          2291: {
        !          2292:     if (T0 > 0)
        !          2293:         T0 = -T0;
        !          2294:     RETURN();
        !          2295: }
        !          2296: 
        !          2297: void OPPROTO op_POWER_nabso (void)
        !          2298: {
        !          2299:     /* nabs never overflows */
        !          2300:     if (T0 > 0)
        !          2301:         T0 = -T0;
        !          2302:     xer_ov = 0;
        !          2303:     RETURN();
        !          2304: }
        !          2305: 
        !          2306: /* XXX: factorise POWER rotates... */
        !          2307: void OPPROTO op_POWER_rlmi (void)
        !          2308: {
        !          2309:     T0 = rotl32(T0, T2) & PARAM1;
        !          2310:     T0 |= T1 & (uint32_t)PARAM2;
        !          2311:     RETURN();
        !          2312: }
        !          2313: 
        !          2314: void OPPROTO op_POWER_rrib (void)
        !          2315: {
        !          2316:     T2 &= 0x1FUL;
        !          2317:     T0 = rotl32(T0 & INT32_MIN, T2);
        !          2318:     T0 |= T1 & ~rotl32(INT32_MIN, T2);
        !          2319:     RETURN();
        !          2320: }
        !          2321: 
        !          2322: void OPPROTO op_POWER_sle (void)
        !          2323: {
        !          2324:     T1 &= 0x1FUL;
        !          2325:     env->spr[SPR_MQ] = rotl32(T0, T1);
        !          2326:     T0 = T0 << T1;
        !          2327:     RETURN();
        !          2328: }
        !          2329: 
        !          2330: void OPPROTO op_POWER_sleq (void)
        !          2331: {
        !          2332:     uint32_t tmp = env->spr[SPR_MQ];
        !          2333: 
        !          2334:     T1 &= 0x1FUL;
        !          2335:     env->spr[SPR_MQ] = rotl32(T0, T1);
        !          2336:     T0 = T0 << T1;
        !          2337:     T0 |= tmp >> (32 - T1);
        !          2338:     RETURN();
        !          2339: }
        !          2340: 
        !          2341: void OPPROTO op_POWER_sllq (void)
        !          2342: {
        !          2343:     uint32_t msk = UINT32_MAX;
        !          2344: 
        !          2345:     msk = msk << (T1 & 0x1FUL);
        !          2346:     if (T1 & 0x20UL)
        !          2347:         msk = ~msk;
        !          2348:     T1 &= 0x1FUL;
        !          2349:     T0 = (T0 << T1) & msk;
        !          2350:     T0 |= env->spr[SPR_MQ] & ~msk;
        !          2351:     RETURN();
        !          2352: }
        !          2353: 
        !          2354: void OPPROTO op_POWER_slq (void)
        !          2355: {
        !          2356:     uint32_t msk = UINT32_MAX, tmp;
        !          2357: 
        !          2358:     msk = msk << (T1 & 0x1FUL);
        !          2359:     if (T1 & 0x20UL)
        !          2360:         msk = ~msk;
        !          2361:     T1 &= 0x1FUL;
        !          2362:     tmp = rotl32(T0, T1);
        !          2363:     T0 = tmp & msk;
        !          2364:     env->spr[SPR_MQ] = tmp;
        !          2365:     RETURN();
        !          2366: }
        !          2367: 
        !          2368: void OPPROTO op_POWER_sraq (void)
        !          2369: {
        !          2370:     env->spr[SPR_MQ] = rotl32(T0, 32 - (T1 & 0x1FUL));
        !          2371:     if (T1 & 0x20UL)
        !          2372:         T0 = UINT32_MAX;
        !          2373:     else
        !          2374:         T0 = (int32_t)T0 >> T1;
        !          2375:     RETURN();
        !          2376: }
        !          2377: 
        !          2378: void OPPROTO op_POWER_sre (void)
        !          2379: {
        !          2380:     T1 &= 0x1FUL;
        !          2381:     env->spr[SPR_MQ] = rotl32(T0, 32 - T1);
        !          2382:     T0 = (int32_t)T0 >> T1;
        !          2383:     RETURN();
        !          2384: }
        !          2385: 
        !          2386: void OPPROTO op_POWER_srea (void)
        !          2387: {
        !          2388:     T1 &= 0x1FUL;
        !          2389:     env->spr[SPR_MQ] = T0 >> T1;
        !          2390:     T0 = (int32_t)T0 >> T1;
        !          2391:     RETURN();
        !          2392: }
        !          2393: 
        !          2394: void OPPROTO op_POWER_sreq (void)
        !          2395: {
        !          2396:     uint32_t tmp;
        !          2397:     int32_t msk;
        !          2398: 
        !          2399:     T1 &= 0x1FUL;
        !          2400:     msk = INT32_MIN >> T1;
        !          2401:     tmp = env->spr[SPR_MQ];
        !          2402:     env->spr[SPR_MQ] = rotl32(T0, 32 - T1);
        !          2403:     T0 = T0 >> T1;
        !          2404:     T0 |= tmp & msk;
        !          2405:     RETURN();
        !          2406: }
        !          2407: 
        !          2408: void OPPROTO op_POWER_srlq (void)
        !          2409: {
        !          2410:     uint32_t tmp;
        !          2411:     int32_t msk;
        !          2412: 
        !          2413:     msk = INT32_MIN >> (T1 & 0x1FUL);
        !          2414:     if (T1 & 0x20UL)
        !          2415:         msk = ~msk;
        !          2416:     T1 &= 0x1FUL;
        !          2417:     tmp = env->spr[SPR_MQ];
        !          2418:     env->spr[SPR_MQ] = rotl32(T0, 32 - T1);
        !          2419:     T0 = T0 >> T1;
        !          2420:     T0 &= msk;
        !          2421:     T0 |= tmp & ~msk;
        !          2422:     RETURN();
        !          2423: }
        !          2424: 
        !          2425: void OPPROTO op_POWER_srq (void)
        !          2426: {
        !          2427:     T1 &= 0x1FUL;
        !          2428:     env->spr[SPR_MQ] = rotl32(T0, 32 - T1);
        !          2429:     T0 = T0 >> T1;
        !          2430:     RETURN();
        !          2431: }
        !          2432: 
        !          2433: /* POWER instructions not implemented in PowerPC 601 */
        !          2434: #if !defined(CONFIG_USER_ONLY)
        !          2435: void OPPROTO op_POWER_mfsri (void)
        !          2436: {
        !          2437:     T1 = T0 >> 28;
        !          2438:     T0 = env->sr[T1];
        !          2439:     RETURN();
        !          2440: }
        !          2441: 
        !          2442: void OPPROTO op_POWER_rac (void)
        !          2443: {
        !          2444:     do_POWER_rac();
        !          2445:     RETURN();
        !          2446: }
        !          2447: 
        !          2448: void OPPROTO op_POWER_rfsvc (void)
        !          2449: {
        !          2450:     do_POWER_rfsvc();
        !          2451:     RETURN();
        !          2452: }
        !          2453: #endif
        !          2454: 
        !          2455: /* PowerPC 602 specific instruction */
        !          2456: #if !defined(CONFIG_USER_ONLY)
        !          2457: void OPPROTO op_602_mfrom (void)
        !          2458: {
        !          2459:     do_op_602_mfrom();
        !          2460:     RETURN();
        !          2461: }
        !          2462: #endif
        !          2463: 
        !          2464: /* PowerPC 4xx specific micro-ops */
        !          2465: void OPPROTO op_405_add_T0_T2 (void)
        !          2466: {
        !          2467:     T0 = (int32_t)T0 + (int32_t)T2;
        !          2468:     RETURN();
        !          2469: }
        !          2470: 
        !          2471: void OPPROTO op_405_mulchw (void)
        !          2472: {
        !          2473:     T0 = ((int16_t)T0) * ((int16_t)(T1 >> 16));
        !          2474:     RETURN();
        !          2475: }
        !          2476: 
        !          2477: void OPPROTO op_405_mulchwu (void)
        !          2478: {
        !          2479:     T0 = ((uint16_t)T0) * ((uint16_t)(T1 >> 16));
        !          2480:     RETURN();
        !          2481: }
        !          2482: 
        !          2483: void OPPROTO op_405_mulhhw (void)
        !          2484: {
        !          2485:     T0 = ((int16_t)(T0 >> 16)) * ((int16_t)(T1 >> 16));
        !          2486:     RETURN();
        !          2487: }
        !          2488: 
        !          2489: void OPPROTO op_405_mulhhwu (void)
        !          2490: {
        !          2491:     T0 = ((uint16_t)(T0 >> 16)) * ((uint16_t)(T1 >> 16));
        !          2492:     RETURN();
        !          2493: }
        !          2494: 
        !          2495: void OPPROTO op_405_mullhw (void)
        !          2496: {
        !          2497:     T0 = ((int16_t)T0) * ((int16_t)T1);
        !          2498:     RETURN();
        !          2499: }
        !          2500: 
        !          2501: void OPPROTO op_405_mullhwu (void)
        !          2502: {
        !          2503:     T0 = ((uint16_t)T0) * ((uint16_t)T1);
        !          2504:     RETURN();
        !          2505: }
        !          2506: 
        !          2507: void OPPROTO op_405_check_sat (void)
        !          2508: {
        !          2509:     do_405_check_sat();
        !          2510:     RETURN();
        !          2511: }
        !          2512: 
        !          2513: void OPPROTO op_405_check_ovu (void)
        !          2514: {
        !          2515:     if (likely(T0 >= T2)) {
        !          2516:         xer_ov = 0;
        !          2517:     } else {
        !          2518:         xer_ov = 1;
        !          2519:         xer_so = 1;
        !          2520:     }
        !          2521:     RETURN();
        !          2522: }
        !          2523: 
        !          2524: void OPPROTO op_405_check_satu (void)
        !          2525: {
        !          2526:     if (unlikely(T0 < T2)) {
        !          2527:         /* Saturate result */
        !          2528:         T0 = UINT32_MAX;
        !          2529:     }
        !          2530:     RETURN();
        !          2531: }
        !          2532: 
        !          2533: void OPPROTO op_load_dcr (void)
        !          2534: {
        !          2535:     do_load_dcr();
        !          2536:     RETURN();
        !          2537: }
        !          2538: 
        !          2539: void OPPROTO op_store_dcr (void)
        !          2540: {
        !          2541:     do_store_dcr();
        !          2542:     RETURN();
        !          2543: }
        !          2544: 
        !          2545: #if !defined(CONFIG_USER_ONLY)
        !          2546: /* Return from critical interrupt :
        !          2547:  * same as rfi, except nip & MSR are loaded from SRR2/3 instead of SRR0/1
        !          2548:  */
        !          2549: void OPPROTO op_40x_rfci (void)
        !          2550: {
        !          2551:     do_40x_rfci();
        !          2552:     RETURN();
        !          2553: }
        !          2554: 
        !          2555: void OPPROTO op_rfci (void)
        !          2556: {
        !          2557:     do_rfci();
        !          2558:     RETURN();
        !          2559: }
        !          2560: 
        !          2561: void OPPROTO op_rfdi (void)
        !          2562: {
        !          2563:     do_rfdi();
        !          2564:     RETURN();
        !          2565: }
        !          2566: 
        !          2567: void OPPROTO op_rfmci (void)
        !          2568: {
        !          2569:     do_rfmci();
        !          2570:     RETURN();
        !          2571: }
        !          2572: 
        !          2573: void OPPROTO op_wrte (void)
        !          2574: {
        !          2575:     /* We don't call do_store_msr here as we won't trigger
        !          2576:      * any special case nor change hflags
        !          2577:      */
        !          2578:     T0 &= 1 << MSR_EE;
        !          2579:     env->msr &= ~(1 << MSR_EE);
        !          2580:     env->msr |= T0;
        !          2581:     RETURN();
        !          2582: }
        !          2583: 
        !          2584: void OPPROTO op_440_tlbre (void)
        !          2585: {
        !          2586:     do_440_tlbre(PARAM1);
        !          2587:     RETURN();
        !          2588: }
        !          2589: 
        !          2590: void OPPROTO op_440_tlbsx (void)
        !          2591: {
        !          2592:     T0 = ppcemb_tlb_search(env, T0, env->spr[SPR_440_MMUCR] & 0xFF);
        !          2593:     RETURN();
        !          2594: }
        !          2595: 
        !          2596: void OPPROTO op_4xx_tlbsx_check (void)
        !          2597: {
        !          2598:     int tmp;
        !          2599: 
        !          2600:     tmp = xer_so;
        !          2601:     if ((int)T0 != -1)
        !          2602:         tmp |= 0x02;
        !          2603:     env->crf[0] = tmp;
        !          2604:     RETURN();
        !          2605: }
        !          2606: 
        !          2607: void OPPROTO op_440_tlbwe (void)
        !          2608: {
        !          2609:     do_440_tlbwe(PARAM1);
        !          2610:     RETURN();
        !          2611: }
        !          2612: 
        !          2613: void OPPROTO op_4xx_tlbre_lo (void)
        !          2614: {
        !          2615:     do_4xx_tlbre_lo();
        !          2616:     RETURN();
        !          2617: }
        !          2618: 
        !          2619: void OPPROTO op_4xx_tlbre_hi (void)
        !          2620: {
        !          2621:     do_4xx_tlbre_hi();
        !          2622:     RETURN();
        !          2623: }
        !          2624: 
        !          2625: void OPPROTO op_4xx_tlbsx (void)
        !          2626: {
        !          2627:     T0 = ppcemb_tlb_search(env, T0, env->spr[SPR_40x_PID]);
        !          2628:     RETURN();
        !          2629: }
        !          2630: 
        !          2631: void OPPROTO op_4xx_tlbwe_lo (void)
        !          2632: {
        !          2633:     do_4xx_tlbwe_lo();
        !          2634:     RETURN();
        !          2635: }
        !          2636: 
        !          2637: void OPPROTO op_4xx_tlbwe_hi (void)
        !          2638: {
        !          2639:     do_4xx_tlbwe_hi();
        !          2640:     RETURN();
        !          2641: }
        !          2642: #endif
        !          2643: 
        !          2644: /* SPR micro-ops */
        !          2645: /* 440 specific */
        !          2646: void OPPROTO op_440_dlmzb (void)
        !          2647: {
        !          2648:     do_440_dlmzb();
        !          2649:     RETURN();
        !          2650: }
        !          2651: 
        !          2652: void OPPROTO op_440_dlmzb_update_Rc (void)
        !          2653: {
        !          2654:     if (T0 == 8)
        !          2655:         T0 = 0x2;
        !          2656:     else if (T0 < 4)
        !          2657:         T0 = 0x4;
        !          2658:     else
        !          2659:         T0 = 0x8;
        !          2660:     RETURN();
        !          2661: }
        !          2662: 
        !          2663: #if !defined(CONFIG_USER_ONLY)
        !          2664: void OPPROTO op_store_pir (void)
        !          2665: {
        !          2666:     env->spr[SPR_PIR] = T0 & 0x0000000FUL;
        !          2667:     RETURN();
        !          2668: }
        !          2669: 
        !          2670: void OPPROTO op_load_403_pb (void)
        !          2671: {
        !          2672:     do_load_403_pb(PARAM1);
        !          2673:     RETURN();
        !          2674: }
        !          2675: 
        !          2676: void OPPROTO op_store_403_pb (void)
        !          2677: {
        !          2678:     do_store_403_pb(PARAM1);
        !          2679:     RETURN();
        !          2680: }
        !          2681: 
        !          2682: void OPPROTO op_load_40x_pit (void)
        !          2683: {
        !          2684:     T0 = load_40x_pit(env);
        !          2685:     RETURN();
        !          2686: }
        !          2687: 
        !          2688: void OPPROTO op_store_40x_pit (void)
        !          2689: {
        !          2690:     store_40x_pit(env, T0);
        !          2691:     RETURN();
        !          2692: }
        !          2693: 
        !          2694: void OPPROTO op_store_40x_dbcr0 (void)
        !          2695: {
        !          2696:     store_40x_dbcr0(env, T0);
        !          2697:     RETURN();
        !          2698: }
        !          2699: 
        !          2700: void OPPROTO op_store_40x_sler (void)
        !          2701: {
        !          2702:     store_40x_sler(env, T0);
        !          2703:     RETURN();
        !          2704: }
        !          2705: 
        !          2706: void OPPROTO op_store_booke_tcr (void)
        !          2707: {
        !          2708:     store_booke_tcr(env, T0);
        !          2709:     RETURN();
        !          2710: }
        !          2711: 
        !          2712: void OPPROTO op_store_booke_tsr (void)
        !          2713: {
        !          2714:     store_booke_tsr(env, T0);
        !          2715:     RETURN();
        !          2716: }
        !          2717: #endif /* !defined(CONFIG_USER_ONLY) */
        !          2718: 
        !          2719: /* SPE extension */
        !          2720: void OPPROTO op_splatw_T1_64 (void)
        !          2721: {
        !          2722:     T1_64 = (T1_64 << 32) | (T1_64 & 0x00000000FFFFFFFFULL);
        !          2723:     RETURN();
        !          2724: }
        !          2725: 
        !          2726: void OPPROTO op_splatwi_T0_64 (void)
        !          2727: {
        !          2728:     uint64_t tmp = PARAM1;
        !          2729: 
        !          2730:     T0_64 = (tmp << 32) | tmp;
        !          2731:     RETURN();
        !          2732: }
        !          2733: 
        !          2734: void OPPROTO op_splatwi_T1_64 (void)
        !          2735: {
        !          2736:     uint64_t tmp = PARAM1;
        !          2737: 
        !          2738:     T1_64 = (tmp << 32) | tmp;
        !          2739:     RETURN();
        !          2740: }
        !          2741: 
        !          2742: void OPPROTO op_extsh_T1_64 (void)
        !          2743: {
        !          2744:     T1_64 = (int32_t)((int16_t)T1_64);
        !          2745:     RETURN();
        !          2746: }
        !          2747: 
        !          2748: void OPPROTO op_sli16_T1_64 (void)
        !          2749: {
        !          2750:     T1_64 = T1_64 << 16;
        !          2751:     RETURN();
        !          2752: }
        !          2753: 
        !          2754: void OPPROTO op_sli32_T1_64 (void)
        !          2755: {
        !          2756:     T1_64 = T1_64 << 32;
        !          2757:     RETURN();
        !          2758: }
        !          2759: 
        !          2760: void OPPROTO op_srli32_T1_64 (void)
        !          2761: {
        !          2762:     T1_64 = T1_64 >> 32;
        !          2763:     RETURN();
        !          2764: }
        !          2765: 
        !          2766: void OPPROTO op_evsel (void)
        !          2767: {
        !          2768:     do_evsel();
        !          2769:     RETURN();
        !          2770: }
        !          2771: 
        !          2772: void OPPROTO op_evaddw (void)
        !          2773: {
        !          2774:     do_evaddw();
        !          2775:     RETURN();
        !          2776: }
        !          2777: 
        !          2778: void OPPROTO op_evsubfw (void)
        !          2779: {
        !          2780:     do_evsubfw();
        !          2781:     RETURN();
        !          2782: }
        !          2783: 
        !          2784: void OPPROTO op_evneg (void)
        !          2785: {
        !          2786:     do_evneg();
        !          2787:     RETURN();
        !          2788: }
        !          2789: 
        !          2790: void OPPROTO op_evabs (void)
        !          2791: {
        !          2792:     do_evabs();
        !          2793:     RETURN();
        !          2794: }
        !          2795: 
        !          2796: void OPPROTO op_evextsh (void)
        !          2797: {
        !          2798:     T0_64 = ((uint64_t)((int32_t)(int16_t)(T0_64 >> 32)) << 32) |
        !          2799:         (uint64_t)((int32_t)(int16_t)T0_64);
        !          2800:     RETURN();
        !          2801: }
        !          2802: 
        !          2803: void OPPROTO op_evextsb (void)
        !          2804: {
        !          2805:     T0_64 = ((uint64_t)((int32_t)(int8_t)(T0_64 >> 32)) << 32) |
        !          2806:         (uint64_t)((int32_t)(int8_t)T0_64);
        !          2807:     RETURN();
        !          2808: }
        !          2809: 
        !          2810: void OPPROTO op_evcntlzw (void)
        !          2811: {
        !          2812:     do_evcntlzw();
        !          2813:     RETURN();
        !          2814: }
        !          2815: 
        !          2816: void OPPROTO op_evrndw (void)
        !          2817: {
        !          2818:     do_evrndw();
        !          2819:     RETURN();
        !          2820: }
        !          2821: 
        !          2822: void OPPROTO op_brinc (void)
        !          2823: {
        !          2824:     do_brinc();
        !          2825:     RETURN();
        !          2826: }
        !          2827: 
        !          2828: void OPPROTO op_evcntlsw (void)
        !          2829: {
        !          2830:     do_evcntlsw();
        !          2831:     RETURN();
        !          2832: }
        !          2833: 
        !          2834: void OPPROTO op_evand (void)
        !          2835: {
        !          2836:     T0_64 &= T1_64;
        !          2837:     RETURN();
        !          2838: }
        !          2839: 
        !          2840: void OPPROTO op_evandc (void)
        !          2841: {
        !          2842:     T0_64 &= ~T1_64;
        !          2843:     RETURN();
        !          2844: }
        !          2845: 
        !          2846: void OPPROTO op_evor (void)
        !          2847: {
        !          2848:     T0_64 |= T1_64;
        !          2849:     RETURN();
        !          2850: }
        !          2851: 
        !          2852: void OPPROTO op_evxor (void)
        !          2853: {
        !          2854:     T0_64 ^= T1_64;
        !          2855:     RETURN();
        !          2856: }
        !          2857: 
        !          2858: void OPPROTO op_eveqv (void)
        !          2859: {
        !          2860:     T0_64 = ~(T0_64 ^ T1_64);
        !          2861:     RETURN();
        !          2862: }
        !          2863: 
        !          2864: void OPPROTO op_evnor (void)
        !          2865: {
        !          2866:     T0_64 = ~(T0_64 | T1_64);
        !          2867:     RETURN();
        !          2868: }
        !          2869: 
        !          2870: void OPPROTO op_evorc (void)
        !          2871: {
        !          2872:     T0_64 |= ~T1_64;
        !          2873:     RETURN();
        !          2874: }
        !          2875: 
        !          2876: void OPPROTO op_evnand (void)
        !          2877: {
        !          2878:     T0_64 = ~(T0_64 & T1_64);
        !          2879:     RETURN();
        !          2880: }
        !          2881: 
        !          2882: void OPPROTO op_evsrws (void)
        !          2883: {
        !          2884:     do_evsrws();
        !          2885:     RETURN();
        !          2886: }
        !          2887: 
        !          2888: void OPPROTO op_evsrwu (void)
        !          2889: {
        !          2890:     do_evsrwu();
        !          2891:     RETURN();
        !          2892: }
        !          2893: 
        !          2894: void OPPROTO op_evslw (void)
        !          2895: {
        !          2896:     do_evslw();
        !          2897:     RETURN();
        !          2898: }
        !          2899: 
        !          2900: void OPPROTO op_evrlw (void)
        !          2901: {
        !          2902:     do_evrlw();
        !          2903:     RETURN();
        !          2904: }
        !          2905: 
        !          2906: void OPPROTO op_evmergelo (void)
        !          2907: {
        !          2908:     T0_64 = (T0_64 << 32) | (T1_64 & 0x00000000FFFFFFFFULL);
        !          2909:     RETURN();
        !          2910: }
        !          2911: 
        !          2912: void OPPROTO op_evmergehi (void)
        !          2913: {
        !          2914:     T0_64 = (T0_64 & 0xFFFFFFFF00000000ULL) | (T1_64 >> 32);
        !          2915:     RETURN();
        !          2916: }
        !          2917: 
        !          2918: void OPPROTO op_evmergelohi (void)
        !          2919: {
        !          2920:     T0_64 = (T0_64 << 32) | (T1_64 >> 32);
        !          2921:     RETURN();
        !          2922: }
        !          2923: 
        !          2924: void OPPROTO op_evmergehilo (void)
        !          2925: {
        !          2926:     T0_64 = (T0_64 & 0xFFFFFFFF00000000ULL) | (T1_64 & 0x00000000FFFFFFFFULL);
        !          2927:     RETURN();
        !          2928: }
        !          2929: 
        !          2930: void OPPROTO op_evcmpgts (void)
        !          2931: {
        !          2932:     do_evcmpgts();
        !          2933:     RETURN();
        !          2934: }
        !          2935: 
        !          2936: void OPPROTO op_evcmpgtu (void)
        !          2937: {
        !          2938:     do_evcmpgtu();
        !          2939:     RETURN();
        !          2940: }
        !          2941: 
        !          2942: void OPPROTO op_evcmplts (void)
        !          2943: {
        !          2944:     do_evcmplts();
        !          2945:     RETURN();
        !          2946: }
        !          2947: 
        !          2948: void OPPROTO op_evcmpltu (void)
        !          2949: {
        !          2950:     do_evcmpltu();
        !          2951:     RETURN();
        !          2952: }
        !          2953: 
        !          2954: void OPPROTO op_evcmpeq (void)
        !          2955: {
        !          2956:     do_evcmpeq();
        !          2957:     RETURN();
        !          2958: }
        !          2959: 
        !          2960: void OPPROTO op_evfssub (void)
        !          2961: {
        !          2962:     do_evfssub();
        !          2963:     RETURN();
        !          2964: }
        !          2965: 
        !          2966: void OPPROTO op_evfsadd (void)
        !          2967: {
        !          2968:     do_evfsadd();
        !          2969:     RETURN();
        !          2970: }
        !          2971: 
        !          2972: void OPPROTO op_evfsnabs (void)
        !          2973: {
        !          2974:     do_evfsnabs();
        !          2975:     RETURN();
        !          2976: }
        !          2977: 
        !          2978: void OPPROTO op_evfsabs (void)
        !          2979: {
        !          2980:     do_evfsabs();
        !          2981:     RETURN();
        !          2982: }
        !          2983: 
        !          2984: void OPPROTO op_evfsneg (void)
        !          2985: {
        !          2986:     do_evfsneg();
        !          2987:     RETURN();
        !          2988: }
        !          2989: 
        !          2990: void OPPROTO op_evfsdiv (void)
        !          2991: {
        !          2992:     do_evfsdiv();
        !          2993:     RETURN();
        !          2994: }
        !          2995: 
        !          2996: void OPPROTO op_evfsmul (void)
        !          2997: {
        !          2998:     do_evfsmul();
        !          2999:     RETURN();
        !          3000: }
        !          3001: 
        !          3002: void OPPROTO op_evfscmplt (void)
        !          3003: {
        !          3004:     do_evfscmplt();
        !          3005:     RETURN();
        !          3006: }
        !          3007: 
        !          3008: void OPPROTO op_evfscmpgt (void)
        !          3009: {
        !          3010:     do_evfscmpgt();
        !          3011:     RETURN();
        !          3012: }
        !          3013: 
        !          3014: void OPPROTO op_evfscmpeq (void)
        !          3015: {
        !          3016:     do_evfscmpeq();
        !          3017:     RETURN();
        !          3018: }
        !          3019: 
        !          3020: void OPPROTO op_evfscfsi (void)
        !          3021: {
        !          3022:     do_evfscfsi();
        !          3023:     RETURN();
        !          3024: }
        !          3025: 
        !          3026: void OPPROTO op_evfscfui (void)
        !          3027: {
        !          3028:     do_evfscfui();
        !          3029:     RETURN();
        !          3030: }
        !          3031: 
        !          3032: void OPPROTO op_evfscfsf (void)
        !          3033: {
        !          3034:     do_evfscfsf();
        !          3035:     RETURN();
        !          3036: }
        !          3037: 
        !          3038: void OPPROTO op_evfscfuf (void)
        !          3039: {
        !          3040:     do_evfscfuf();
        !          3041:     RETURN();
        !          3042: }
        !          3043: 
        !          3044: void OPPROTO op_evfsctsi (void)
        !          3045: {
        !          3046:     do_evfsctsi();
        !          3047:     RETURN();
        !          3048: }
        !          3049: 
        !          3050: void OPPROTO op_evfsctui (void)
        !          3051: {
        !          3052:     do_evfsctui();
        !          3053:     RETURN();
        !          3054: }
        !          3055: 
        !          3056: void OPPROTO op_evfsctsf (void)
        !          3057: {
        !          3058:     do_evfsctsf();
        !          3059:     RETURN();
        !          3060: }
        !          3061: 
        !          3062: void OPPROTO op_evfsctuf (void)
        !          3063: {
        !          3064:     do_evfsctuf();
        !          3065:     RETURN();
        !          3066: }
        !          3067: 
        !          3068: void OPPROTO op_evfsctuiz (void)
        !          3069: {
        !          3070:     do_evfsctuiz();
        !          3071:     RETURN();
        !          3072: }
        !          3073: 
        !          3074: void OPPROTO op_evfsctsiz (void)
        !          3075: {
        !          3076:     do_evfsctsiz();
        !          3077:     RETURN();
        !          3078: }
        !          3079: 
        !          3080: void OPPROTO op_evfststlt (void)
        !          3081: {
        !          3082:     do_evfststlt();
        !          3083:     RETURN();
        !          3084: }
        !          3085: 
        !          3086: void OPPROTO op_evfststgt (void)
        !          3087: {
        !          3088:     do_evfststgt();
        !          3089:     RETURN();
        !          3090: }
        !          3091: 
        !          3092: void OPPROTO op_evfststeq (void)
        !          3093: {
        !          3094:     do_evfststeq();
        !          3095:     RETURN();
        !          3096: }
        !          3097: 
        !          3098: void OPPROTO op_efssub (void)
        !          3099: {
        !          3100:     T0_64 = _do_efssub(T0_64, T1_64);
        !          3101:     RETURN();
        !          3102: }
        !          3103: 
        !          3104: void OPPROTO op_efsadd (void)
        !          3105: {
        !          3106:     T0_64 = _do_efsadd(T0_64, T1_64);
        !          3107:     RETURN();
        !          3108: }
        !          3109: 
        !          3110: void OPPROTO op_efsnabs (void)
        !          3111: {
        !          3112:     T0_64 = _do_efsnabs(T0_64);
        !          3113:     RETURN();
        !          3114: }
        !          3115: 
        !          3116: void OPPROTO op_efsabs (void)
        !          3117: {
        !          3118:     T0_64 = _do_efsabs(T0_64);
        !          3119:     RETURN();
        !          3120: }
        !          3121: 
        !          3122: void OPPROTO op_efsneg (void)
        !          3123: {
        !          3124:     T0_64 = _do_efsneg(T0_64);
        !          3125:     RETURN();
        !          3126: }
        !          3127: 
        !          3128: void OPPROTO op_efsdiv (void)
        !          3129: {
        !          3130:     T0_64 = _do_efsdiv(T0_64, T1_64);
        !          3131:     RETURN();
        !          3132: }
        !          3133: 
        !          3134: void OPPROTO op_efsmul (void)
        !          3135: {
        !          3136:     T0_64 = _do_efsmul(T0_64, T1_64);
        !          3137:     RETURN();
        !          3138: }
        !          3139: 
        !          3140: void OPPROTO op_efscmplt (void)
        !          3141: {
        !          3142:     do_efscmplt();
        !          3143:     RETURN();
        !          3144: }
        !          3145: 
        !          3146: void OPPROTO op_efscmpgt (void)
        !          3147: {
        !          3148:     do_efscmpgt();
        !          3149:     RETURN();
        !          3150: }
        !          3151: 
        !          3152: void OPPROTO op_efscfd (void)
        !          3153: {
        !          3154:     do_efscfd();
        !          3155:     RETURN();
        !          3156: }
        !          3157: 
        !          3158: void OPPROTO op_efscmpeq (void)
        !          3159: {
        !          3160:     do_efscmpeq();
        !          3161:     RETURN();
        !          3162: }
        !          3163: 
        !          3164: void OPPROTO op_efscfsi (void)
        !          3165: {
        !          3166:     do_efscfsi();
        !          3167:     RETURN();
        !          3168: }
        !          3169: 
        !          3170: void OPPROTO op_efscfui (void)
        !          3171: {
        !          3172:     do_efscfui();
        !          3173:     RETURN();
        !          3174: }
        !          3175: 
        !          3176: void OPPROTO op_efscfsf (void)
        !          3177: {
        !          3178:     do_efscfsf();
        !          3179:     RETURN();
        !          3180: }
        !          3181: 
        !          3182: void OPPROTO op_efscfuf (void)
        !          3183: {
        !          3184:     do_efscfuf();
        !          3185:     RETURN();
        !          3186: }
        !          3187: 
        !          3188: void OPPROTO op_efsctsi (void)
        !          3189: {
        !          3190:     do_efsctsi();
        !          3191:     RETURN();
        !          3192: }
        !          3193: 
        !          3194: void OPPROTO op_efsctui (void)
        !          3195: {
        !          3196:     do_efsctui();
        !          3197:     RETURN();
        !          3198: }
        !          3199: 
        !          3200: void OPPROTO op_efsctsf (void)
        !          3201: {
        !          3202:     do_efsctsf();
        !          3203:     RETURN();
        !          3204: }
        !          3205: 
        !          3206: void OPPROTO op_efsctuf (void)
        !          3207: {
        !          3208:     do_efsctuf();
        !          3209:     RETURN();
        !          3210: }
        !          3211: 
        !          3212: void OPPROTO op_efsctsiz (void)
        !          3213: {
        !          3214:     do_efsctsiz();
        !          3215:     RETURN();
        !          3216: }
        !          3217: 
        !          3218: void OPPROTO op_efsctuiz (void)
        !          3219: {
        !          3220:     do_efsctuiz();
        !          3221:     RETURN();
        !          3222: }
        !          3223: 
        !          3224: void OPPROTO op_efststlt (void)
        !          3225: {
        !          3226:     T0 = _do_efststlt(T0_64, T1_64);
        !          3227:     RETURN();
        !          3228: }
        !          3229: 
        !          3230: void OPPROTO op_efststgt (void)
        !          3231: {
        !          3232:     T0 = _do_efststgt(T0_64, T1_64);
        !          3233:     RETURN();
        !          3234: }
        !          3235: 
        !          3236: void OPPROTO op_efststeq (void)
        !          3237: {
        !          3238:     T0 = _do_efststeq(T0_64, T1_64);
        !          3239:     RETURN();
        !          3240: }
        !          3241: 
        !          3242: void OPPROTO op_efdsub (void)
        !          3243: {
        !          3244:     union {
        !          3245:         uint64_t u;
        !          3246:         float64 f;
        !          3247:     } u1, u2;
        !          3248:     u1.u = T0_64;
        !          3249:     u2.u = T1_64;
        !          3250:     u1.f = float64_sub(u1.f, u2.f, &env->spe_status);
        !          3251:     T0_64 = u1.u;
        !          3252:     RETURN();
        !          3253: }
        !          3254: 
        !          3255: void OPPROTO op_efdadd (void)
        !          3256: {
        !          3257:     union {
        !          3258:         uint64_t u;
        !          3259:         float64 f;
        !          3260:     } u1, u2;
        !          3261:     u1.u = T0_64;
        !          3262:     u2.u = T1_64;
        !          3263:     u1.f = float64_add(u1.f, u2.f, &env->spe_status);
        !          3264:     T0_64 = u1.u;
        !          3265:     RETURN();
        !          3266: }
        !          3267: 
        !          3268: void OPPROTO op_efdcfsid (void)
        !          3269: {
        !          3270:     do_efdcfsi();
        !          3271:     RETURN();
        !          3272: }
        !          3273: 
        !          3274: void OPPROTO op_efdcfuid (void)
        !          3275: {
        !          3276:     do_efdcfui();
        !          3277:     RETURN();
        !          3278: }
        !          3279: 
        !          3280: void OPPROTO op_efdnabs (void)
        !          3281: {
        !          3282:     T0_64 |= 0x8000000000000000ULL;
        !          3283:     RETURN();
        !          3284: }
        !          3285: 
        !          3286: void OPPROTO op_efdabs (void)
        !          3287: {
        !          3288:     T0_64 &= ~0x8000000000000000ULL;
        !          3289:     RETURN();
        !          3290: }
        !          3291: 
        !          3292: void OPPROTO op_efdneg (void)
        !          3293: {
        !          3294:     T0_64 ^= 0x8000000000000000ULL;
        !          3295:     RETURN();
        !          3296: }
        !          3297: 
        !          3298: void OPPROTO op_efddiv (void)
        !          3299: {
        !          3300:     union {
        !          3301:         uint64_t u;
        !          3302:         float64 f;
        !          3303:     } u1, u2;
        !          3304:     u1.u = T0_64;
        !          3305:     u2.u = T1_64;
        !          3306:     u1.f = float64_div(u1.f, u2.f, &env->spe_status);
        !          3307:     T0_64 = u1.u;
        !          3308:     RETURN();
        !          3309: }
        !          3310: 
        !          3311: void OPPROTO op_efdmul (void)
        !          3312: {
        !          3313:     union {
        !          3314:         uint64_t u;
        !          3315:         float64 f;
        !          3316:     } u1, u2;
        !          3317:     u1.u = T0_64;
        !          3318:     u2.u = T1_64;
        !          3319:     u1.f = float64_mul(u1.f, u2.f, &env->spe_status);
        !          3320:     T0_64 = u1.u;
        !          3321:     RETURN();
        !          3322: }
        !          3323: 
        !          3324: void OPPROTO op_efdctsidz (void)
        !          3325: {
        !          3326:     do_efdctsiz();
        !          3327:     RETURN();
        !          3328: }
        !          3329: 
        !          3330: void OPPROTO op_efdctuidz (void)
        !          3331: {
        !          3332:     do_efdctuiz();
        !          3333:     RETURN();
        !          3334: }
        !          3335: 
        !          3336: void OPPROTO op_efdcmplt (void)
        !          3337: {
        !          3338:     do_efdcmplt();
        !          3339:     RETURN();
        !          3340: }
        !          3341: 
        !          3342: void OPPROTO op_efdcmpgt (void)
        !          3343: {
        !          3344:     do_efdcmpgt();
        !          3345:     RETURN();
        !          3346: }
        !          3347: 
        !          3348: void OPPROTO op_efdcfs (void)
        !          3349: {
        !          3350:     do_efdcfs();
        !          3351:     RETURN();
        !          3352: }
        !          3353: 
        !          3354: void OPPROTO op_efdcmpeq (void)
        !          3355: {
        !          3356:     do_efdcmpeq();
        !          3357:     RETURN();
        !          3358: }
        !          3359: 
        !          3360: void OPPROTO op_efdcfsi (void)
        !          3361: {
        !          3362:     do_efdcfsi();
        !          3363:     RETURN();
        !          3364: }
        !          3365: 
        !          3366: void OPPROTO op_efdcfui (void)
        !          3367: {
        !          3368:     do_efdcfui();
        !          3369:     RETURN();
        !          3370: }
        !          3371: 
        !          3372: void OPPROTO op_efdcfsf (void)
        !          3373: {
        !          3374:     do_efdcfsf();
        !          3375:     RETURN();
        !          3376: }
        !          3377: 
        !          3378: void OPPROTO op_efdcfuf (void)
        !          3379: {
        !          3380:     do_efdcfuf();
        !          3381:     RETURN();
        !          3382: }
        !          3383: 
        !          3384: void OPPROTO op_efdctsi (void)
        !          3385: {
        !          3386:     do_efdctsi();
        !          3387:     RETURN();
        !          3388: }
        !          3389: 
        !          3390: void OPPROTO op_efdctui (void)
        !          3391: {
        !          3392:     do_efdctui();
        !          3393:     RETURN();
        !          3394: }
        !          3395: 
        !          3396: void OPPROTO op_efdctsf (void)
        !          3397: {
        !          3398:     do_efdctsf();
        !          3399:     RETURN();
        !          3400: }
        !          3401: 
        !          3402: void OPPROTO op_efdctuf (void)
        !          3403: {
        !          3404:     do_efdctuf();
        !          3405:     RETURN();
        !          3406: }
        !          3407: 
        !          3408: void OPPROTO op_efdctuiz (void)
        !          3409: {
        !          3410:     do_efdctuiz();
        !          3411:     RETURN();
        !          3412: }
        !          3413: 
        !          3414: void OPPROTO op_efdctsiz (void)
        !          3415: {
        !          3416:     do_efdctsiz();
        !          3417:     RETURN();
        !          3418: }
        !          3419: 
        !          3420: void OPPROTO op_efdtstlt (void)
        !          3421: {
        !          3422:     T0 = _do_efdtstlt(T0_64, T1_64);
        !          3423:     RETURN();
        !          3424: }
        !          3425: 
        !          3426: void OPPROTO op_efdtstgt (void)
        !          3427: {
        !          3428:     T0 = _do_efdtstgt(T0_64, T1_64);
        !          3429:     RETURN();
        !          3430: }
        !          3431: 
        !          3432: void OPPROTO op_efdtsteq (void)
        !          3433: {
        !          3434:     T0 = _do_efdtsteq(T0_64, T1_64);
1.1       root     3435:     RETURN();
                   3436: }

unix.superglobalmegacorp.com

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