Annotation of qemu/target-alpha/op.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  *  Alpha emulation cpu micro-operations for qemu.
                      3:  *
                      4:  *  Copyright (c) 2007 Jocelyn Mayer
                      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"
                     25: #include "host-utils.h"
                     26: 
                     27: #include "op_helper.h"
                     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: 
                    125: /* Debug stuff */
                    126: void OPPROTO op_no_op (void)
                    127: {
                    128: #if !defined (DEBUG_OP)
                    129:     __asm__ __volatile__("nop" : : : "memory");
                    130: #endif
                    131:     RETURN();
                    132: }
                    133: 
                    134: void OPPROTO op_tb_flush (void)
                    135: {
                    136:     helper_tb_flush();
                    137:     RETURN();
                    138: }
                    139: 
                    140: /* Load and stores */
                    141: #define MEMSUFFIX _raw
                    142: #include "op_mem.h"
                    143: #if !defined(CONFIG_USER_ONLY)
                    144: #define MEMSUFFIX _kernel
                    145: #include "op_mem.h"
                    146: #define MEMSUFFIX _executive
                    147: #include "op_mem.h"
                    148: #define MEMSUFFIX _supervisor
                    149: #include "op_mem.h"
                    150: #define MEMSUFFIX _user
                    151: #include "op_mem.h"
                    152: /* This is used for pal modes */
                    153: #define MEMSUFFIX _data
                    154: #include "op_mem.h"
                    155: #endif
                    156: 
                    157: /* Special operation for load and store */
                    158: void OPPROTO op_n7 (void)
                    159: {
                    160:     T0 &= ~(uint64_t)0x7;
                    161:     RETURN();
                    162: }
                    163: 
                    164: /* Misc */
                    165: void OPPROTO op_excp (void)
                    166: {
                    167:     helper_excp(PARAM(1), PARAM(2));
                    168:     RETURN();
                    169: }
                    170: 
                    171: void OPPROTO op_load_amask (void)
                    172: {
                    173:     helper_amask();
                    174:     RETURN();
                    175: }
                    176: 
                    177: void OPPROTO op_load_pcc (void)
                    178: {
                    179:     helper_load_pcc();
                    180:     RETURN();
                    181: }
                    182: 
                    183: void OPPROTO op_load_implver (void)
                    184: {
                    185:     helper_load_implver();
                    186:     RETURN();
                    187: }
                    188: 
                    189: void OPPROTO op_load_fpcr (void)
                    190: {
                    191:     helper_load_fpcr();
                    192:     RETURN();
                    193: }
                    194: 
                    195: void OPPROTO op_store_fpcr (void)
                    196: {
                    197:     helper_store_fpcr();
                    198:     RETURN();
                    199: }
                    200: 
                    201: void OPPROTO op_load_irf (void)
                    202: {
                    203:     helper_load_irf();
                    204:     RETURN();
                    205: }
                    206: 
                    207: void OPPROTO op_set_irf (void)
                    208: {
                    209:     helper_set_irf();
                    210:     RETURN();
                    211: }
                    212: 
                    213: void OPPROTO op_clear_irf (void)
                    214: {
                    215:     helper_clear_irf();
                    216:     RETURN();
                    217: }
                    218: 
                    219: void OPPROTO op_exit_tb (void)
                    220: {
                    221:     EXIT_TB();
                    222: }
                    223: 
                    224: /* Arithmetic */
                    225: void OPPROTO op_addq (void)
                    226: {
                    227:     T0 += T1;
                    228:     RETURN();
                    229: }
                    230: 
                    231: void OPPROTO op_addqv (void)
                    232: {
                    233:     helper_addqv();
                    234:     RETURN();
                    235: }
                    236: 
                    237: void OPPROTO op_addl (void)
                    238: {
                    239:     T0 = (int64_t)((int32_t)(T0 + T1));
                    240:     RETURN();
                    241: }
                    242: 
                    243: void OPPROTO op_addlv (void)
                    244: {
                    245:     helper_addlv();
                    246:     RETURN();
                    247: }
                    248: 
                    249: void OPPROTO op_subq (void)
                    250: {
                    251:     T0 -= T1;
                    252:     RETURN();
                    253: }
                    254: 
                    255: void OPPROTO op_subqv (void)
                    256: {
                    257:     helper_subqv();
                    258:     RETURN();
                    259: }
                    260: 
                    261: void OPPROTO op_subl (void)
                    262: {
                    263:     T0 = (int64_t)((int32_t)(T0 - T1));
                    264:     RETURN();
                    265: }
                    266: 
                    267: void OPPROTO op_sublv (void)
                    268: {
                    269:     helper_sublv();
                    270:     RETURN();
                    271: }
                    272: 
                    273: void OPPROTO op_s4 (void)
                    274: {
                    275:     T0 <<= 2;
                    276:     RETURN();
                    277: }
                    278: 
                    279: void OPPROTO op_s8 (void)
                    280: {
                    281:     T0 <<= 3;
                    282:     RETURN();
                    283: }
                    284: 
                    285: void OPPROTO op_mull (void)
                    286: {
                    287:     T0 = (int64_t)((int32_t)T0 * (int32_t)T1);
                    288:     RETURN();
                    289: }
                    290: 
                    291: void OPPROTO op_mullv (void)
                    292: {
                    293:     helper_mullv();
                    294:     RETURN();
                    295: }
                    296: 
                    297: void OPPROTO op_mulq (void)
                    298: {
                    299:     T0 = (int64_t)T0 * (int64_t)T1;
                    300:     RETURN();
                    301: }
                    302: 
                    303: void OPPROTO op_mulqv (void)
                    304: {
                    305:     helper_mulqv();
                    306:     RETURN();
                    307: }
                    308: 
                    309: void OPPROTO op_umulh (void)
                    310: {
                    311:     uint64_t tl, th;
                    312: 
                    313:     mulu64(&tl, &th, T0, T1);
                    314:     T0 = th;
                    315:     RETURN();
                    316: }
                    317: 
                    318: /* Logical */
                    319: void OPPROTO op_and (void)
                    320: {
                    321:     T0 &= T1;
                    322:     RETURN();
                    323: }
                    324: 
                    325: void OPPROTO op_bic (void)
                    326: {
                    327:     T0 &= ~T1;
                    328:     RETURN();
                    329: }
                    330: 
                    331: void OPPROTO op_bis (void)
                    332: {
                    333:     T0 |= T1;
                    334:     RETURN();
                    335: }
                    336: 
                    337: void OPPROTO op_eqv (void)
                    338: {
                    339:     T0 ^= ~T1;
                    340:     RETURN();
                    341: }
                    342: 
                    343: void OPPROTO op_ornot (void)
                    344: {
                    345:     T0 |= ~T1;
                    346:     RETURN();
                    347: }
                    348: 
                    349: void OPPROTO op_xor (void)
                    350: {
                    351:     T0 ^= T1;
                    352:     RETURN();
                    353: }
                    354: 
                    355: void OPPROTO op_sll (void)
                    356: {
                    357:     T0 <<= T1;
                    358:     RETURN();
                    359: }
                    360: 
                    361: void OPPROTO op_srl (void)
                    362: {
                    363:     T0 >>= T1;
                    364:     RETURN();
                    365: }
                    366: 
                    367: void OPPROTO op_sra (void)
                    368: {
                    369:     T0 = (int64_t)T0 >> T1;
                    370:     RETURN();
                    371: }
                    372: 
                    373: void OPPROTO op_sextb (void)
                    374: {
                    375:     T0 = (int64_t)((int8_t)T0);
                    376:     RETURN();
                    377: }
                    378: 
                    379: void OPPROTO op_sextw (void)
                    380: {
                    381:     T0 = (int64_t)((int16_t)T0);
                    382:     RETURN();
                    383: 
                    384: }
                    385: 
                    386: void OPPROTO op_ctpop (void)
                    387: {
                    388:     helper_ctpop();
                    389:     RETURN();
                    390: }
                    391: 
                    392: void OPPROTO op_ctlz (void)
                    393: {
                    394:     helper_ctlz();
                    395:     RETURN();
                    396: }
                    397: 
                    398: void OPPROTO op_cttz (void)
                    399: {
                    400:     helper_cttz();
                    401:     RETURN();
                    402: }
                    403: 
                    404: void OPPROTO op_mskbl (void)
                    405: {
                    406:     helper_mskbl();
                    407:     RETURN();
                    408: }
                    409: 
                    410: void OPPROTO op_extbl (void)
                    411: {
                    412:     helper_extbl();
                    413:     RETURN();
                    414: }
                    415: 
                    416: void OPPROTO op_insbl (void)
                    417: {
                    418:     helper_insbl();
                    419:     RETURN();
                    420: }
                    421: 
                    422: void OPPROTO op_mskwl (void)
                    423: {
                    424:     helper_mskwl();
                    425:     RETURN();
                    426: }
                    427: 
                    428: void OPPROTO op_extwl (void)
                    429: {
                    430:     helper_extwl();
                    431:     RETURN();
                    432: }
                    433: 
                    434: void OPPROTO op_inswl (void)
                    435: {
                    436:     helper_inswl();
                    437:     RETURN();
                    438: }
                    439: 
                    440: void OPPROTO op_mskll (void)
                    441: {
                    442:     helper_mskll();
                    443:     RETURN();
                    444: }
                    445: 
                    446: void OPPROTO op_extll (void)
                    447: {
                    448:     helper_extll();
                    449:     RETURN();
                    450: }
                    451: 
                    452: void OPPROTO op_insll (void)
                    453: {
                    454:     helper_insll();
                    455:     RETURN();
                    456: }
                    457: 
                    458: void OPPROTO op_zap (void)
                    459: {
                    460:     helper_zap();
                    461:     RETURN();
                    462: }
                    463: 
                    464: void OPPROTO op_zapnot (void)
                    465: {
                    466:     helper_zapnot();
                    467:     RETURN();
                    468: }
                    469: 
                    470: void OPPROTO op_mskql (void)
                    471: {
                    472:     helper_mskql();
                    473:     RETURN();
                    474: }
                    475: 
                    476: void OPPROTO op_extql (void)
                    477: {
                    478:     helper_extql();
                    479:     RETURN();
                    480: }
                    481: 
                    482: void OPPROTO op_insql (void)
                    483: {
                    484:     helper_insql();
                    485:     RETURN();
                    486: }
                    487: 
                    488: void OPPROTO op_mskwh (void)
                    489: {
                    490:     helper_mskwh();
                    491:     RETURN();
                    492: }
                    493: 
                    494: void OPPROTO op_inswh (void)
                    495: {
                    496:     helper_inswh();
                    497:     RETURN();
                    498: }
                    499: 
                    500: void OPPROTO op_extwh (void)
                    501: {
                    502:     helper_extwh();
                    503:     RETURN();
                    504: }
                    505: 
                    506: void OPPROTO op_msklh (void)
                    507: {
                    508:     helper_msklh();
                    509:     RETURN();
                    510: }
                    511: 
                    512: void OPPROTO op_inslh (void)
                    513: {
                    514:     helper_inslh();
                    515:     RETURN();
                    516: }
                    517: 
                    518: void OPPROTO op_extlh (void)
                    519: {
                    520:     helper_extlh();
                    521:     RETURN();
                    522: }
                    523: 
                    524: void OPPROTO op_mskqh (void)
                    525: {
                    526:     helper_mskqh();
                    527:     RETURN();
                    528: }
                    529: 
                    530: void OPPROTO op_insqh (void)
                    531: {
                    532:     helper_insqh();
                    533:     RETURN();
                    534: }
                    535: 
                    536: void OPPROTO op_extqh (void)
                    537: {
                    538:     helper_extqh();
                    539:     RETURN();
                    540: }
                    541: 
                    542: /* Tests */
                    543: void OPPROTO op_cmpult (void)
                    544: {
                    545:     if (T0 < T1)
                    546:         T0 = 1;
                    547:     else
                    548:         T0 = 0;
                    549:     RETURN();
                    550: }
                    551: 
                    552: void OPPROTO op_cmpule (void)
                    553: {
                    554:     if (T0 <= T1)
                    555:         T0 = 1;
                    556:     else
                    557:         T0 = 0;
                    558:     RETURN();
                    559: }
                    560: 
                    561: void OPPROTO op_cmpeq (void)
                    562: {
                    563:     if (T0 == T1)
                    564:         T0 = 1;
                    565:     else
                    566:         T0 = 0;
                    567:     RETURN();
                    568: }
                    569: 
                    570: void OPPROTO op_cmplt (void)
                    571: {
                    572:     if ((int64_t)T0 < (int64_t)T1)
                    573:         T0 = 1;
                    574:     else
                    575:         T0 = 0;
                    576:     RETURN();
                    577: }
                    578: 
                    579: void OPPROTO op_cmple (void)
                    580: {
                    581:     if ((int64_t)T0 <= (int64_t)T1)
                    582:         T0 = 1;
                    583:     else
                    584:         T0 = 0;
                    585:     RETURN();
                    586: }
                    587: 
                    588: void OPPROTO op_cmpbge (void)
                    589: {
                    590:     helper_cmpbge();
                    591:     RETURN();
                    592: }
                    593: 
                    594: void OPPROTO op_cmpeqz (void)
                    595: {
                    596:     if (T0 == 0)
                    597:         T0 = 1;
                    598:     else
                    599:         T0 = 0;
                    600:     RETURN();
                    601: }
                    602: 
                    603: void OPPROTO op_cmpnez (void)
                    604: {
                    605:     if (T0 != 0)
                    606:         T0 = 1;
                    607:     else
                    608:         T0 = 0;
                    609:     RETURN();
                    610: }
                    611: 
                    612: void OPPROTO op_cmpltz (void)
                    613: {
                    614:     if ((int64_t)T0 < 0)
                    615:         T0 = 1;
                    616:     else
                    617:         T0 = 0;
                    618:     RETURN();
                    619: }
                    620: 
                    621: void OPPROTO op_cmplez (void)
                    622: {
                    623:     if ((int64_t)T0 <= 0)
                    624:         T0 = 1;
                    625:     else
                    626:         T0 = 0;
                    627:     RETURN();
                    628: }
                    629: 
                    630: void OPPROTO op_cmpgtz (void)
                    631: {
                    632:     if ((int64_t)T0 > 0)
                    633:         T0 = 1;
                    634:     else
                    635:         T0 = 0;
                    636:     RETURN();
                    637: }
                    638: 
                    639: void OPPROTO op_cmpgez (void)
                    640: {
                    641:     if ((int64_t)T0 >= 0)
                    642:         T0 = 1;
                    643:     else
                    644:         T0 = 0;
                    645:     RETURN();
                    646: }
                    647: 
                    648: void OPPROTO op_cmplbs (void)
                    649: {
                    650:     T0 &= 1;
                    651:     RETURN();
                    652: }
                    653: 
                    654: void OPPROTO op_cmplbc (void)
                    655: {
                    656:     T0 = (~T0) & 1;
                    657:     RETURN();
                    658: }
                    659: 
                    660: /* Branches */
                    661: void OPPROTO op_branch (void)
                    662: {
                    663:     env->pc = T0 & ~3;
                    664:     RETURN();
                    665: }
                    666: 
                    667: void OPPROTO op_addq1 (void)
                    668: {
                    669:     T1 += T0;
                    670:     RETURN();
                    671: }
                    672: 
                    673: #if 0 // Qemu does not know how to do this...
                    674: void OPPROTO op_bcond (void)
                    675: {
                    676:     if (T0)
                    677:         env->pc = T1 & ~3;
                    678:     else
                    679:         env->pc = PARAM(1);
                    680:     RETURN();
                    681: }
                    682: #else
                    683: void OPPROTO op_bcond (void)
                    684: {
                    685:     if (T0)
                    686:         env->pc = T1 & ~3;
                    687:     else
                    688:         env->pc = ((uint64_t)PARAM(1) << 32) | (uint64_t)PARAM(2);
                    689:     RETURN();
                    690: }
                    691: #endif
                    692: 
                    693: #if 0 // Qemu does not know how to do this...
                    694: void OPPROTO op_update_pc (void)
                    695: {
                    696:     env->pc = PARAM(1);
                    697:     RETURN();
                    698: }
                    699: #else
                    700: void OPPROTO op_update_pc (void)
                    701: {
                    702:     env->pc = ((uint64_t)PARAM(1) << 32) | (uint64_t)PARAM(2);
                    703:     RETURN();
                    704: }
                    705: #endif
                    706: 
                    707: /* Optimization for 32 bits hosts architectures */
                    708: void OPPROTO op_update_pc32 (void)
                    709: {
                    710:     env->pc = (uint64_t)PARAM(1);
                    711:     RETURN();
                    712: }
                    713: 
                    714: /* IEEE floating point arithmetic */
                    715: /* S floating (single) */
                    716: void OPPROTO op_adds (void)
                    717: {
                    718:     FT0 = float32_add(FT0, FT1, &FP_STATUS);
                    719:     RETURN();
                    720: }
                    721: 
                    722: void OPPROTO op_subs (void)
                    723: {
                    724:     FT0 = float32_sub(FT0, FT1, &FP_STATUS);
                    725:     RETURN();
                    726: }
                    727: 
                    728: void OPPROTO op_muls (void)
                    729: {
                    730:     FT0 = float32_mul(FT0, FT1, &FP_STATUS);
                    731:     RETURN();
                    732: }
                    733: 
                    734: void OPPROTO op_divs (void)
                    735: {
                    736:     FT0 = float32_div(FT0, FT1, &FP_STATUS);
                    737:     RETURN();
                    738: }
                    739: 
                    740: void OPPROTO op_sqrts (void)
                    741: {
                    742:     helper_sqrts();
                    743:     RETURN();
                    744: }
                    745: 
                    746: void OPPROTO op_cpys (void)
                    747: {
                    748:     helper_cpys();
                    749:     RETURN();
                    750: }
                    751: 
                    752: void OPPROTO op_cpysn (void)
                    753: {
                    754:     helper_cpysn();
                    755:     RETURN();
                    756: }
                    757: 
                    758: void OPPROTO op_cpyse (void)
                    759: {
                    760:     helper_cpyse();
                    761:     RETURN();
                    762: }
                    763: 
                    764: void OPPROTO op_itofs (void)
                    765: {
                    766:     helper_itofs();
                    767:     RETURN();
                    768: }
                    769: 
                    770: void OPPROTO op_ftois (void)
                    771: {
                    772:     helper_ftois();
                    773:     RETURN();
                    774: }
                    775: 
                    776: /* T floating (double) */
                    777: void OPPROTO op_addt (void)
                    778: {
                    779:     FT0 = float64_add(FT0, FT1, &FP_STATUS);
                    780:     RETURN();
                    781: }
                    782: 
                    783: void OPPROTO op_subt (void)
                    784: {
                    785:     FT0 = float64_sub(FT0, FT1, &FP_STATUS);
                    786:     RETURN();
                    787: }
                    788: 
                    789: void OPPROTO op_mult (void)
                    790: {
                    791:     FT0 = float64_mul(FT0, FT1, &FP_STATUS);
                    792:     RETURN();
                    793: }
                    794: 
                    795: void OPPROTO op_divt (void)
                    796: {
                    797:     FT0 = float64_div(FT0, FT1, &FP_STATUS);
                    798:     RETURN();
                    799: }
                    800: 
                    801: void OPPROTO op_sqrtt (void)
                    802: {
                    803:     helper_sqrtt();
                    804:     RETURN();
                    805: }
                    806: 
                    807: void OPPROTO op_cmptun (void)
                    808: {
                    809:     helper_cmptun();
                    810:     RETURN();
                    811: }
                    812: 
                    813: void OPPROTO op_cmpteq (void)
                    814: {
                    815:     helper_cmpteq();
                    816:     RETURN();
                    817: }
                    818: 
                    819: void OPPROTO op_cmptle (void)
                    820: {
                    821:     helper_cmptle();
                    822:     RETURN();
                    823: }
                    824: 
                    825: void OPPROTO op_cmptlt (void)
                    826: {
                    827:     helper_cmptlt();
                    828:     RETURN();
                    829: }
                    830: 
                    831: void OPPROTO op_itoft (void)
                    832: {
                    833:     helper_itoft();
                    834:     RETURN();
                    835: }
                    836: 
                    837: void OPPROTO op_ftoit (void)
                    838: {
                    839:     helper_ftoit();
                    840:     RETURN();
                    841: }
                    842: 
                    843: /* VAX floating point arithmetic */
                    844: /* F floating */
                    845: void OPPROTO op_addf (void)
                    846: {
                    847:     helper_addf();
                    848:     RETURN();
                    849: }
                    850: 
                    851: void OPPROTO op_subf (void)
                    852: {
                    853:     helper_subf();
                    854:     RETURN();
                    855: }
                    856: 
                    857: void OPPROTO op_mulf (void)
                    858: {
                    859:     helper_mulf();
                    860:     RETURN();
                    861: }
                    862: 
                    863: void OPPROTO op_divf (void)
                    864: {
                    865:     helper_divf();
                    866:     RETURN();
                    867: }
                    868: 
                    869: void OPPROTO op_sqrtf (void)
                    870: {
                    871:     helper_sqrtf();
                    872:     RETURN();
                    873: }
                    874: 
                    875: void OPPROTO op_cmpfeq (void)
                    876: {
                    877:     helper_cmpfeq();
                    878:     RETURN();
                    879: }
                    880: 
                    881: void OPPROTO op_cmpfne (void)
                    882: {
                    883:     helper_cmpfne();
                    884:     RETURN();
                    885: }
                    886: 
                    887: void OPPROTO op_cmpflt (void)
                    888: {
                    889:     helper_cmpflt();
                    890:     RETURN();
                    891: }
                    892: 
                    893: void OPPROTO op_cmpfle (void)
                    894: {
                    895:     helper_cmpfle();
                    896:     RETURN();
                    897: }
                    898: 
                    899: void OPPROTO op_cmpfgt (void)
                    900: {
                    901:     helper_cmpfgt();
                    902:     RETURN();
                    903: }
                    904: 
                    905: void OPPROTO op_cmpfge (void)
                    906: {
                    907:     helper_cmpfge();
                    908:     RETURN();
                    909: }
                    910: 
                    911: void OPPROTO op_itoff (void)
                    912: {
                    913:     helper_itoff();
                    914:     RETURN();
                    915: }
                    916: 
                    917: /* G floating */
                    918: void OPPROTO op_addg (void)
                    919: {
                    920:     helper_addg();
                    921:     RETURN();
                    922: }
                    923: 
                    924: void OPPROTO op_subg (void)
                    925: {
                    926:     helper_subg();
                    927:     RETURN();
                    928: }
                    929: 
                    930: void OPPROTO op_mulg (void)
                    931: {
                    932:     helper_mulg();
                    933:     RETURN();
                    934: }
                    935: 
                    936: void OPPROTO op_divg (void)
                    937: {
                    938:     helper_divg();
                    939:     RETURN();
                    940: }
                    941: 
                    942: void OPPROTO op_sqrtg (void)
                    943: {
                    944:     helper_sqrtg();
                    945:     RETURN();
                    946: }
                    947: 
                    948: void OPPROTO op_cmpgeq (void)
                    949: {
                    950:     helper_cmpgeq();
                    951:     RETURN();
                    952: }
                    953: 
                    954: void OPPROTO op_cmpglt (void)
                    955: {
                    956:     helper_cmpglt();
                    957:     RETURN();
                    958: }
                    959: 
                    960: void OPPROTO op_cmpgle (void)
                    961: {
                    962:     helper_cmpgle();
                    963:     RETURN();
                    964: }
                    965: 
                    966: /* Floating point format conversion */
                    967: void OPPROTO op_cvtst (void)
                    968: {
                    969:     FT0 = (float)FT0;
                    970:     RETURN();
                    971: }
                    972: 
                    973: void OPPROTO op_cvtqs (void)
                    974: {
                    975:     helper_cvtqs();
                    976:     RETURN();
                    977: }
                    978: 
                    979: void OPPROTO op_cvtts (void)
                    980: {
                    981:     FT0 = (float)FT0;
                    982:     RETURN();
                    983: }
                    984: 
                    985: void OPPROTO op_cvttq (void)
                    986: {
                    987:     helper_cvttq();
                    988:     RETURN();
                    989: }
                    990: 
                    991: void OPPROTO op_cvtqt (void)
                    992: {
                    993:     helper_cvtqt();
                    994:     RETURN();
                    995: }
                    996: 
                    997: void OPPROTO op_cvtqf (void)
                    998: {
                    999:     helper_cvtqf();
                   1000:     RETURN();
                   1001: }
                   1002: 
                   1003: void OPPROTO op_cvtgf (void)
                   1004: {
                   1005:     helper_cvtgf();
                   1006:     RETURN();
                   1007: }
                   1008: 
                   1009: void OPPROTO op_cvtgd (void)
                   1010: {
                   1011:     helper_cvtgd();
                   1012:     RETURN();
                   1013: }
                   1014: 
                   1015: void OPPROTO op_cvtgq (void)
                   1016: {
                   1017:     helper_cvtgq();
                   1018:     RETURN();
                   1019: }
                   1020: 
                   1021: void OPPROTO op_cvtqg (void)
                   1022: {
                   1023:     helper_cvtqg();
                   1024:     RETURN();
                   1025: }
                   1026: 
                   1027: void OPPROTO op_cvtdg (void)
                   1028: {
                   1029:     helper_cvtdg();
                   1030:     RETURN();
                   1031: }
                   1032: 
                   1033: void OPPROTO op_cvtlq (void)
                   1034: {
                   1035:     helper_cvtlq();
                   1036:     RETURN();
                   1037: }
                   1038: 
                   1039: void OPPROTO op_cvtql (void)
                   1040: {
                   1041:     helper_cvtql();
                   1042:     RETURN();
                   1043: }
                   1044: 
                   1045: void OPPROTO op_cvtqlv (void)
                   1046: {
                   1047:     helper_cvtqlv();
                   1048:     RETURN();
                   1049: }
                   1050: 
                   1051: void OPPROTO op_cvtqlsv (void)
                   1052: {
                   1053:     helper_cvtqlsv();
                   1054:     RETURN();
                   1055: }
                   1056: 
                   1057: /* PALcode support special instructions */
                   1058: #if !defined (CONFIG_USER_ONLY)
                   1059: void OPPROTO op_hw_rei (void)
                   1060: {
                   1061:     env->pc = env->ipr[IPR_EXC_ADDR] & ~3;
                   1062:     env->ipr[IPR_EXC_ADDR] = env->ipr[IPR_EXC_ADDR] & 1;
                   1063:     /* XXX: re-enable interrupts and memory mapping */
                   1064:     RETURN();
                   1065: }
                   1066: 
                   1067: void OPPROTO op_hw_ret (void)
                   1068: {
                   1069:     env->pc = T0 & ~3;
                   1070:     env->ipr[IPR_EXC_ADDR] = T0 & 1;
                   1071:     /* XXX: re-enable interrupts and memory mapping */
                   1072:     RETURN();
                   1073: }
                   1074: 
                   1075: void OPPROTO op_mfpr (void)
                   1076: {
                   1077:     helper_mfpr(PARAM(1));
                   1078:     RETURN();
                   1079: }
                   1080: 
                   1081: void OPPROTO op_mtpr (void)
                   1082: {
                   1083:     helper_mtpr(PARAM(1));
                   1084:     RETURN();
                   1085: }
                   1086: 
                   1087: void OPPROTO op_set_alt_mode (void)
                   1088: {
                   1089:     env->saved_mode = env->ps & 0xC;
                   1090:     env->ps = (env->ps & ~0xC) | (env->ipr[IPR_ALT_MODE] & 0xC);
                   1091:     RETURN();
                   1092: }
                   1093: 
                   1094: void OPPROTO op_restore_mode (void)
                   1095: {
                   1096:     env->ps = (env->ps & ~0xC) | env->saved_mode;
                   1097:     RETURN();
                   1098: }
                   1099: 
                   1100: void OPPROTO op_ld_phys_to_virt (void)
                   1101: {
                   1102:     helper_ld_phys_to_virt();
                   1103:     RETURN();
                   1104: }
                   1105: 
                   1106: void OPPROTO op_st_phys_to_virt (void)
                   1107: {
                   1108:     helper_st_phys_to_virt();
                   1109:     RETURN();
                   1110: }
                   1111: #endif /* !defined (CONFIG_USER_ONLY) */

unix.superglobalmegacorp.com

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