Annotation of tme/ic/sparc/sparc-fpu-auto.sh, revision 1.1.1.2

1.1       root        1: #! /bin/sh
                      2: 
1.1.1.2 ! root        3: # $Id: sparc-fpu-auto.sh,v 1.6 2009/11/08 16:27:12 fredette Exp $
1.1       root        4: 
                      5: # ic/sparc-fpu-auto.sh - automatically generates C code for many SPARC FPU
                      6: # emulation instructions:
                      7: 
                      8: #
                      9: # Copyright (c) 2005 Matt Fredette
                     10: # All rights reserved.
                     11: #
                     12: # Redistribution and use in source and binary forms, with or without
                     13: # modification, are permitted provided that the following conditions
                     14: # are met:
                     15: # 1. Redistributions of source code must retain the above copyright
                     16: #    notice, this list of conditions and the following disclaimer.
                     17: # 2. Redistributions in binary form must reproduce the above copyright
                     18: #    notice, this list of conditions and the following disclaimer in the
                     19: #    documentation and/or other materials provided with the distribution.
                     20: # 3. All advertising materials mentioning features or use of this software
                     21: #    must display the following acknowledgement:
                     22: #      This product includes software developed by Matt Fredette.
                     23: # 4. The name of the author may not be used to endorse or promote products
                     24: #    derived from this software without specific prior written permission.
                     25: #
                     26: # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
                     27: # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
                     28: # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
                     29: # DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
                     30: # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
                     31: # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
                     32: # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     33: # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
                     34: # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
                     35: # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
                     36: # POSSIBILITY OF SUCH DAMAGE.
                     37: #
                     38: 
                     39: header=false
                     40: 
                     41: for option
                     42: do
                     43:     case $option in
                     44:     --header) header=true ;;
                     45:     esac
                     46: done
                     47: 
                     48: PROG=`basename $0`
                     49: cat <<EOF
                     50: /* automatically generated by $PROG, do not edit! */
1.1.1.2 ! root       51: _TME_RCSID("\$Id: sparc-fpu-auto.sh,v 1.6 2009/11/08 16:27:12 fredette Exp $");
1.1       root       52: EOF
                     53: 
                     54: # the precision information helper script:
                     55: #
                     56: ieee754_precision_sh=`echo $0 | sed -e "s%$PROG%../ieee754/ieee754-precision.sh%"`
                     57: 
                     58: # permute for the different precisions:
                     59: #
                     60: for precision in single double quad; do
                     61:     
                     62:     # get information about this precision:
                     63:     #
                     64:     eval `sh ${ieee754_precision_sh} ${precision}`
                     65: 
                     66:     dst_formats="(TME_FLOAT_FORMAT_IEEE754_${capprecision} | TME_FLOAT_FORMAT_IEEE754_${capprecision}_BUILTIN)"
                     67: 
                     68:     cat <<EOF
                     69: 
                     70: /* this sets the floating-point condition codes after a
                     71:    ${precision}-precision operation: */
                     72: static void inline
                     73: _tme_sparc_fpu_fcc_${precision}(struct tme_sparc *ic, const struct tme_float *dst, int trap_on_nan)
                     74: {
                     75:   tme_uint32_t fcc;
1.1.1.2 ! root       76:   unsigned int cc;
1.1       root       77: 
                     78:   /* set fcc: */
                     79:   fcc = (tme_float_is_nan(dst, ${dst_formats})
                     80:          ? TME_SPARC_FSR_FCC_UN
                     81:         : tme_float_is_zero(dst, ${dst_formats})
                     82:         ? TME_SPARC_FSR_FCC_EQ
                     83:         : tme_float_is_negative(dst, ${dst_formats})
                     84:         ? TME_SPARC_FSR_FCC_LT
                     85:         : TME_SPARC_FSR_FCC_GT);
                     86: 
                     87:   /* if this is an FCMPE and this is a NaN, we always cause an invalid exception: */
                     88:   if (trap_on_nan && fcc == TME_SPARC_FSR_FCC_UN) {
                     89:     _tme_sparc_fpu_exception_ieee754(&ic->tme_sparc_fpu_ieee754_ctl, TME_FLOAT_EXCEPTION_INVALID);
                     90:   }
                     91: 
                     92:   /* set the floating-point condition codes: */
1.1.1.2 ! root       93:   if (TME_SPARC_VERSION(ic) >= 9) {
        !            94:     cc = TME_FIELD_MASK_EXTRACTU(TME_SPARC_INSN, (0x3 << 25));
        !            95:     if (cc != 0) {
        !            96:       fcc = TME_FIELD_MASK_EXTRACTU(fcc, TME_SPARC_FSR_FCC);
        !            97:       ic->tme_sparc_fpu_xfsr
        !            98:        = ((ic->tme_sparc_fpu_xfsr
        !            99:            & ~ (tme_uint32_t) (0x3 << (2 * (cc - 1))))
        !           100:           | (fcc << (2 * (cc - 1))));
        !           101:       return;
        !           102:     }
        !           103:   }
1.1       root      104:   ic->tme_sparc_fpu_fsr = (ic->tme_sparc_fpu_fsr & ~TME_SPARC_FSR_FCC) | fcc;
                    105: }
                    106: 
                    107: /* if the most significant bit of the NaN fraction is zero,
                    108:    this is a signaling NaN: */
                    109: #define _TME_SPARC_FPU_IS_SNAN_${capprecision}(a) (((*(a))${chunk_member_0} & ((${chunk_mask_0} | (${chunk_mask_0} >> 1)) ^ (${chunk_mask_0} >> 1))) != 0)
                    110: static tme_int8_t
                    111: _tme_sparc_fpu_is_snan_${precision}(${integral} *value)
                    112: {
                    113:   return (_TME_SPARC_FPU_IS_SNAN_${capprecision}(value));
                    114: }
                    115: 
                    116: /* ${precision}-precision NaN propagation: */
                    117: static void
                    118: _tme_sparc_fpu_nan_from_nans_${precision}(struct tme_ieee754_ctl *ctl, 
                    119:                                     const ${integral} *a,
                    120:                                     const ${integral} *b,
                    121:                                     ${integral} *z)
                    122: {
                    123:   struct tme_sparc *ic;
                    124:   int a_is_snan;
                    125:   int b_is_snan;
                    126: 
                    127:   /* recover our data structure : */
                    128:   ic = ctl->tme_ieee754_ctl_private;    
                    129: 
                    130:   /* see if any of the NaNs are signaling NaNs: */
                    131:   a_is_snan = _TME_SPARC_FPU_IS_SNAN_${capprecision}(a);
                    132:   b_is_snan = _TME_SPARC_FPU_IS_SNAN_${capprecision}(b);
                    133: 
                    134:   /* if either operand is a signaling NaN: */
                    135:   if (a_is_snan || b_is_snan) {
                    136: 
                    137:     /* signal the signaling NaN: */
                    138:     _tme_sparc_fpu_exception_ieee754(ctl, TME_FLOAT_EXCEPTION_INVALID);
                    139:   }
                    140: 
                    141:   /* if and only if a (corresponding to f[rs1]) is a signaling NaN, do 
                    142:      we return a. at all other times we return b (corresponding to f[rs2]): */
                    143:   if (a_is_snan) {
                    144:     b = a;
                    145:   }
                    146: 
                    147:   /* return the NaN, but make sure it's nonsignaling: */
                    148:   *z = *b;
                    149:   (*(z))${chunk_member_0} |= ((${chunk_mask_0} | (${chunk_mask_0} >> 1)) ^ (${chunk_mask_0} >> 1));
                    150: }
                    151: 
                    152: EOF
                    153: 
                    154: done
                    155: 
                    156: if $header; then :; else
                    157:     echo "#define _TME_SPARC_FPU_UNIMPL tme_sparc_fpu_exception(ic, TME_SPARC_FSR_FTT_unimplemented_FPop)"
                    158:     echo "#define _TME_SPARC_FPU_UNIMPL_IF(flags) do { if ((ic->tme_sparc_fpu_flags & (flags)) != 0) { _TME_SPARC_FPU_UNIMPL; } } while (/* CONSTCOND */ 0)"
                    159: fi
                    160: quad="_TME_SPARC_FPU_UNIMPL_IF(TME_SPARC_FPU_FLAG_NO_QUAD);"
                    161: 
                    162: # permute over fpop1/fpop2:
                    163: #
                    164: for fpop in fpop1 fpop2; do
                    165: 
                    166:     # placeholder for another permutation:
                    167:     #
                    168:     :
                    169:        
                    170:        # open the function:
                    171:        #
                    172:        echo ""
                    173:        echo "void"
                    174:        echo "tme_sparc_fpu_${fpop}(struct tme_sparc *ic)"
                    175:        echo "{"
                    176:        echo "  tme_uint8_t rounding_mode;"
                    177:        echo "  unsigned int opf;"
1.1.1.2 ! root      178:        echo "  unsigned int fpreg_rd_number_encoded;"
1.1       root      179:        echo "  unsigned int fpreg_rd_number;"
                    180:        echo "  const struct tme_float *fpreg_rs1;"
                    181:        echo "  const struct tme_float *fpreg_rs2;"
                    182:        if test ${fpop} = fpop1; then
                    183:            echo "  struct tme_float fpreg_rs1_buffer;"
                    184:            echo "  struct tme_float fpreg_rs2_buffer;"
1.1.1.2 ! root      185:        else
        !           186:            echo "  unsigned int cc;"
        !           187:            echo "  tme_uint32_t conds_mask;"
        !           188:            echo "  unsigned int cc_i;"
        !           189:            echo "  tme_uint32_t cond;"
1.1       root      190:        fi
                    191:        echo "  struct tme_float fpreg_rd;"
                    192:        echo "  unsigned int fpreg_rd_format;"
                    193: 
                    194:        echo ""
                    195:        echo "  /* set the rounding mode: */"
                    196:        echo "  switch (ic->tme_sparc_fpu_fsr & TME_SPARC_FSR_RND) {"
                    197:        echo "  default: assert(FALSE);"
                    198:        echo "  case TME_SPARC_FSR_RND_RN: rounding_mode = TME_FLOAT_ROUND_NEAREST_EVEN; break;"
                    199:        echo "  case TME_SPARC_FSR_RND_RZ: rounding_mode = TME_FLOAT_ROUND_TO_ZERO; break;"
                    200:        echo "  case TME_SPARC_FSR_RND_RM: rounding_mode = TME_FLOAT_ROUND_DOWN; break;"
                    201:        echo "  case TME_SPARC_FSR_RND_RP: rounding_mode = TME_FLOAT_ROUND_UP; break;"
                    202:        echo "  }"
                    203:        echo "  ic->tme_sparc_fpu_ieee754_ctl.tme_ieee754_ctl_rounding_mode = rounding_mode;"
                    204: 
                    205:        echo ""
                    206:        echo "  /* decode the rd and opf fields: */"
1.1.1.2 ! root      207:        echo "  fpreg_rd_number_encoded = TME_FIELD_MASK_EXTRACTU(TME_SPARC_INSN, TME_SPARC_FORMAT3_MASK_RD);"
1.1       root      208:        echo "  opf = TME_FIELD_MASK_EXTRACTU(TME_SPARC_INSN, (0x1ff << 5));"
                    209: 
                    210:        echo ""
1.1.1.2 ! root      211:        echo "  /* silence uninitialized variable warnings: */"
        !           212:        echo "  fpreg_rd_number = 0;"
        !           213: 
        !           214:        echo ""
        !           215:        echo "#ifdef _TME_SPARC_RECODE_VERIFY"
        !           216:        echo "  /* clear the rd buffer: */"
        !           217:        echo "  memset(&fpreg_rd, 0, sizeof(fpreg_rd));"
        !           218:        echo "#endif /* _TME_SPARC_RECODE_VERIFY */"
        !           219: 
        !           220:        fmovcc=
        !           221:        if test ${fpop} = fpop2; then
        !           222:            fmovcc=cc
        !           223:            echo ""
        !           224:            echo "  /* if this is an FMOVcc: */"
        !           225:            echo "  if (((opf - 1) & 0x3f) < 3) {"
        !           226:            echo ""
        !           227:            echo "    /* if opf bit eight is set, this uses integer condition codes: */"
        !           228:            echo "    if (opf & TME_BIT(8)) {"
        !           229:            echo ""
        !           230:            echo "      /* if opf bit six is set, this is unimplemented: */"
        !           231:            echo "      if (__tme_predict_false(opf & TME_BIT(6))) {"
        !           232:            echo "        _TME_SPARC_FPU_UNIMPL;"
        !           233:            echo "      }"
        !           234:            echo ""
        !           235:            echo "      /* get %icc or %xcc, depending on opf bit seven: */"
        !           236:            echo "      cc = ic->tme_sparc64_ireg_ccr;"
        !           237:            echo "      if (opf & TME_BIT(7)) {"
        !           238:            echo "        cc /= (TME_SPARC64_CCR_XCC / TME_SPARC64_CCR_ICC);"
        !           239:            echo "      }"
        !           240:            echo "      cc = TME_FIELD_MASK_EXTRACTU(cc, TME_SPARC64_CCR_ICC);"
        !           241:            echo ""
        !           242:            echo "      /* get the conditions mask: */"
        !           243:            echo "      conds_mask = _tme_sparc_conds_icc[cc];"
        !           244:            echo "    }"
        !           245:            echo ""
        !           246:            echo "    /* otherwise, this uses floating-point condition codes: */"
        !           247:            echo "    else {"
        !           248:            echo ""
        !           249:            echo "      /* get the right %fcc: */"
        !           250:            echo "      cc_i = TME_FIELD_MASK_EXTRACTU(opf, (0x3 << 6));"
        !           251:            echo "      if (cc_i == 0) {"
        !           252:            echo "        cc = TME_FIELD_MASK_EXTRACTU(ic->tme_sparc_fpu_fsr, TME_SPARC_FSR_FCC);"
        !           253:            echo "      }"
        !           254:            echo "      else {"
        !           255:            echo "        cc = (ic->tme_sparc_fpu_xfsr >> (2 * (cc_i - 1))) & 0x3;"
        !           256:            echo "      }"
        !           257:            echo ""
        !           258:            echo "      /* get the conditions mask: */"
        !           259:            echo "      conds_mask = _tme_sparc_conds_fcc[cc];"
        !           260:            echo "    }"
        !           261:            echo ""
        !           262:            echo "    /* add the not-conditions to the conditions mask: */"
        !           263:            echo "    conds_mask += ((~conds_mask) << 8);"
        !           264:            echo ""
        !           265:            echo "    /* get the cond field: */"
        !           266:            echo "    cond = TME_BIT(TME_FIELD_MASK_EXTRACTU(TME_SPARC_INSN, (0xf << 14)));"
        !           267:            echo ""
        !           268:            echo "    /* if the condition is not true: */"
        !           269:            echo "    if (!(conds_mask & cond)) {"
        !           270:            echo ""
        !           271:            echo "      /* return now: */"
        !           272:            echo "      /* NB that this may expose us to guests, since we do not check"
        !           273:            echo "         that the floating-point register numbers are valid: */"
        !           274:            echo "      return;"
        !           275:            echo "    }"
        !           276:            echo ""
        !           277:            echo "    /* clear bits six, seven, and eight in opf: */"
        !           278:            echo "    opf &= 0x3f;"
        !           279:            echo "  }"
        !           280:        fi
        !           281: 
        !           282:        echo ""
1.1       root      283:        echo "  /* dispatch on the opf field: */"
                    284:        echo "  switch (opf) {"
                    285:        echo "#define _TME_SPARC_FPU_FORMAT_RS1(format) fpreg_rs1 = tme_sparc_fpu_fpreg_read(ic, TME_SPARC_FORMAT3_MASK_RS1, (format))"
                    286:        echo "#define _TME_SPARC_FPU_FORMAT_RS2(format) fpreg_rs2 = tme_sparc_fpu_fpreg_read(ic, TME_SPARC_FORMAT3_MASK_RS2, (format))"
1.1.1.2 ! root      287:        echo "#define _TME_SPARC_FPU_FORMAT_RD(format) do { fpreg_rd_format = (format) | TME_IEEE754_FPREG_FORMAT_BUILTIN; fpreg_rd_number = tme_sparc_fpu_fpreg_decode(ic, fpreg_rd_number_encoded, fpreg_rd_format); } while (/* CONSTCOND */ 0)"
1.1       root      288:        echo ""
                    289: 
                    290:        # permute over the opf field:
                    291:        #
                    292:        opf_decimal=-1
                    293:        while test ${opf_decimal} != 511; do
                    294:            opf_decimal=`expr ${opf_decimal} + 1`
                    295: 
                    296:            # make the binary version of the opf field:
                    297:            #
                    298:            bits=9
                    299:            opf=
                    300:            opf_shifted=${opf_decimal}
                    301:            while test ${bits} != 0; do
                    302:                bits=`expr ${bits} - 1`
                    303:                opf_shifted_next=`expr ${opf_shifted} / 2`
                    304:                opf_test=`expr ${opf_shifted_next} \* 2`
                    305:                if test ${opf_test} = ${opf_shifted}; then
                    306:                    opf="0${opf}"
                    307:                else
                    308:                    opf="1${opf}"
                    309:                fi
                    310:                opf_shifted=${opf_shifted_next}
                    311:            done
                    312: 
                    313:            # dispatch on the fpop/opf combination:
                    314:            #
                    315:            default=false
                    316:            case "${fpop}:${opf}" in
                    317:            fpop1:011000100)
                    318:                echo "  case ${opf_decimal}:  /* ${opf} FiTOs: */"
                    319:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_SINGLE);"
                    320:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_SINGLE);"
                    321:                echo "    _TME_SPARC_FPU_BEGIN;"
                    322:                echo "    _TME_SPARC_FPU_OP_MONADIC(tme_ieee754_ops_single_from_int32,"
                    323:                echo "                              fpreg_rs2->tme_float_value_ieee754_single, &fpreg_rd);"
                    324:                ;;
                    325:            fpop1:011001000)
                    326:                echo "  case ${opf_decimal}:  /* ${opf} FiTOd: */"
                    327:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_SINGLE);"
                    328:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_DOUBLE);"
                    329:                echo "    _TME_SPARC_FPU_BEGIN;"
                    330:                echo "    _TME_SPARC_FPU_OP_MONADIC(tme_ieee754_ops_double_from_int32,"
                    331:                echo "                              fpreg_rs2->tme_float_value_ieee754_single, &fpreg_rd);"
                    332:                ;;
                    333:            fpop1:011001100)
                    334:                echo "  case ${opf_decimal}:  /* ${opf} FiTOq: */"
                    335:                echo "    ${quad}"
                    336:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_SINGLE);"
                    337:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_QUAD);"
                    338:                echo "    _TME_SPARC_FPU_BEGIN;"
                    339:                echo "    _TME_SPARC_FPU_OP_MONADIC(tme_ieee754_ops_quad_from_int32,"
                    340:                echo "                              fpreg_rs2->tme_float_value_ieee754_single, &fpreg_rd);"
                    341:                ;;
1.1.1.2 ! root      342:            fpop1:010000100)
        !           343:                echo "  case ${opf_decimal}:  /* ${opf} FxTOs: */"
        !           344:                echo "#ifdef TME_HAVE_INT64_T"
        !           345:                echo "    if (__tme_predict_true(TME_SPARC_VERSION(ic) >= 9)) {"
        !           346:                echo "      _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_DOUBLE);"
        !           347:                echo "      _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_SINGLE);"
        !           348:                echo "      _TME_SPARC_FPU_BEGIN;"
        !           349:                echo "      _TME_SPARC_FPU_OP_MONADIC(tme_ieee754_ops_single_from_int64,"
        !           350:                echo "                                fpreg_rs2->tme_float_value_ieee754_double.tme_value64_int, &fpreg_rd);"
        !           351:                echo "      break;"
        !           352:                echo "    }"
        !           353:                echo "#endif /* TME_HAVE_INT64_T */"
        !           354:                echo "    _TME_SPARC_FPU_UNIMPL;"
        !           355:                echo "    fpreg_rd_format = TME_IEEE754_FPREG_FORMAT_NULL;"
        !           356:                ;;
        !           357:            fpop1:010001000)
        !           358:                echo "  case ${opf_decimal}:  /* ${opf} FxTOd: */"
        !           359:                echo "#ifdef TME_HAVE_INT64_T"
        !           360:                echo "    if (__tme_predict_true(TME_SPARC_VERSION(ic) >= 9)) {"
        !           361:                echo "      _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_DOUBLE);"
        !           362:                echo "      _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_DOUBLE);"
        !           363:                echo "      _TME_SPARC_FPU_BEGIN;"
        !           364:                echo "      _TME_SPARC_FPU_OP_MONADIC(tme_ieee754_ops_double_from_int64,"
        !           365:                echo "                                fpreg_rs2->tme_float_value_ieee754_double.tme_value64_int, &fpreg_rd);"
        !           366:                echo "      break;"
        !           367:                echo "    }"
        !           368:                echo "#endif /* TME_HAVE_INT64_T */"
        !           369:                echo "    _TME_SPARC_FPU_UNIMPL;"
        !           370:                echo "    fpreg_rd_format = TME_IEEE754_FPREG_FORMAT_NULL;"
        !           371:                ;;
        !           372:            fpop1:010001100)
        !           373:                echo "  case ${opf_decimal}:  /* ${opf} FxTOq: */"
        !           374:                echo "#ifdef TME_HAVE_INT64_T"
        !           375:                echo "    if (__tme_predict_true(TME_SPARC_VERSION(ic) >= 9)) {"
        !           376:                echo "      ${quad}"
        !           377:                echo "      _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_DOUBLE);"
        !           378:                echo "      _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_QUAD);"
        !           379:                echo "      _TME_SPARC_FPU_BEGIN;"
        !           380:                echo "      _TME_SPARC_FPU_OP_MONADIC(tme_ieee754_ops_quad_from_int64,"
        !           381:                echo "                                fpreg_rs2->tme_float_value_ieee754_double.tme_value64_int, &fpreg_rd);"
        !           382:                echo "      break;"
        !           383:                echo "    }"
        !           384:                echo "#endif /* TME_HAVE_INT64_T */"
        !           385:                echo "    _TME_SPARC_FPU_UNIMPL;"
        !           386:                echo "    fpreg_rd_format = TME_IEEE754_FPREG_FORMAT_NULL;"
        !           387:                ;;
1.1       root      388:            fpop1:011010001)
                    389:                echo "  case ${opf_decimal}:  /* ${opf} FsTOi: */"
                    390:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_SINGLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    391:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_SINGLE);"
                    392:                echo "    _TME_SPARC_FPU_BEGIN;"
                    393:                echo "    fpreg_rd.tme_float_format = TME_FLOAT_FORMAT_IEEE754_SINGLE;"
                    394:                echo "    ic->tme_sparc_fpu_ieee754_ctl.tme_ieee754_ctl_rounding_mode = TME_FLOAT_ROUND_TO_ZERO;"
                    395:                echo "    _TME_SPARC_FPU_OP_MONADIC(tme_ieee754_ops_single_to_int32,"
                    396:                echo "                              fpreg_rs2, (tme_int32_t *) &fpreg_rd.tme_float_value_ieee754_single);"
                    397:                ;;
                    398:            fpop1:011010010)
                    399:                echo "  case ${opf_decimal}:  /* ${opf} FdTOi: */"
                    400:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_DOUBLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    401:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_SINGLE);"
                    402:                echo "    _TME_SPARC_FPU_BEGIN;"
                    403:                echo "    fpreg_rd.tme_float_format = TME_FLOAT_FORMAT_IEEE754_SINGLE;"
                    404:                echo "    ic->tme_sparc_fpu_ieee754_ctl.tme_ieee754_ctl_rounding_mode = TME_FLOAT_ROUND_TO_ZERO;"
                    405:                echo "    _TME_SPARC_FPU_OP_MONADIC(tme_ieee754_ops_double_to_int32,"
                    406:                echo "                              fpreg_rs2, (tme_int32_t *) &fpreg_rd.tme_float_value_ieee754_single);"
                    407:                ;;
                    408:            fpop1:011010011)
                    409:                echo "  case ${opf_decimal}:  /* ${opf} FqTOi: */"
                    410:                echo "    ${quad}"
                    411:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_QUAD | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    412:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_SINGLE);"
                    413:                echo "    _TME_SPARC_FPU_BEGIN;"
                    414:                echo "    fpreg_rd.tme_float_format = TME_FLOAT_FORMAT_IEEE754_SINGLE;"
                    415:                echo "    ic->tme_sparc_fpu_ieee754_ctl.tme_ieee754_ctl_rounding_mode = TME_FLOAT_ROUND_TO_ZERO;"
                    416:                echo "    _TME_SPARC_FPU_OP_MONADIC(tme_ieee754_ops_quad_to_int32,"
                    417:                echo "                              fpreg_rs2, (tme_int32_t *) &fpreg_rd.tme_float_value_ieee754_single);"
                    418:                ;;
1.1.1.2 ! root      419:            fpop1:010000001)
        !           420:                echo "  case ${opf_decimal}:  /* ${opf} FsTOx: */"
        !           421:                echo "#ifdef TME_HAVE_INT64_T"
        !           422:                echo "    if (__tme_predict_true(TME_SPARC_VERSION(ic) >= 9)) {"
        !           423:                echo "      _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_SINGLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
        !           424:                echo "      _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_DOUBLE);"
        !           425:                echo "      _TME_SPARC_FPU_BEGIN;"
        !           426:                echo "      fpreg_rd.tme_float_format = TME_FLOAT_FORMAT_IEEE754_DOUBLE;"
        !           427:                echo "      ic->tme_sparc_fpu_ieee754_ctl.tme_ieee754_ctl_rounding_mode = TME_FLOAT_ROUND_TO_ZERO;"
        !           428:                echo "      _TME_SPARC_FPU_OP_MONADIC(tme_ieee754_ops_single_to_int64,"
        !           429:                echo "                                fpreg_rs2, &fpreg_rd.tme_float_value_ieee754_double.tme_value64_int);"
        !           430:                echo "      break;"
        !           431:                echo "    }"
        !           432:                echo "#endif /* TME_HAVE_INT64_T */"
        !           433:                echo "    _TME_SPARC_FPU_UNIMPL;"
        !           434:                echo "    fpreg_rd_format = TME_IEEE754_FPREG_FORMAT_NULL;"
        !           435:                ;;
        !           436:            fpop1:010000010)
        !           437:                echo "  case ${opf_decimal}:  /* ${opf} FdTOx: */"
        !           438:                echo "#ifdef TME_HAVE_INT64_T"
        !           439:                echo "    if (__tme_predict_true(TME_SPARC_VERSION(ic) >= 9)) {"
        !           440:                echo "      _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_DOUBLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
        !           441:                echo "      _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_DOUBLE);"
        !           442:                echo "      _TME_SPARC_FPU_BEGIN;"
        !           443:                echo "      fpreg_rd.tme_float_format = TME_FLOAT_FORMAT_IEEE754_DOUBLE;"
        !           444:                echo "      ic->tme_sparc_fpu_ieee754_ctl.tme_ieee754_ctl_rounding_mode = TME_FLOAT_ROUND_TO_ZERO;"
        !           445:                echo "      _TME_SPARC_FPU_OP_MONADIC(tme_ieee754_ops_double_to_int64,"
        !           446:                echo "                                fpreg_rs2, &fpreg_rd.tme_float_value_ieee754_double.tme_value64_int);"
        !           447:                echo "      break;"
        !           448:                echo "    }"
        !           449:                echo "#endif /* TME_HAVE_INT64_T */"
        !           450:                echo "    _TME_SPARC_FPU_UNIMPL;"
        !           451:                echo "    fpreg_rd_format = TME_IEEE754_FPREG_FORMAT_NULL;"
        !           452:                ;;
        !           453:            fpop1:010000011)
        !           454:                echo "  case ${opf_decimal}:  /* ${opf} FqTOx: */"
        !           455:                echo "#ifdef TME_HAVE_INT64_T"
        !           456:                echo "    if (__tme_predict_true(TME_SPARC_VERSION(ic) >= 9)) {"
        !           457:                echo "      ${quad}"
        !           458:                echo "      _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_QUAD | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
        !           459:                echo "      _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_DOUBLE);"
        !           460:                echo "      _TME_SPARC_FPU_BEGIN;"
        !           461:                echo "      fpreg_rd.tme_float_format = TME_FLOAT_FORMAT_IEEE754_DOUBLE;"
        !           462:                echo "      ic->tme_sparc_fpu_ieee754_ctl.tme_ieee754_ctl_rounding_mode = TME_FLOAT_ROUND_TO_ZERO;"
        !           463:                echo "      _TME_SPARC_FPU_OP_MONADIC(tme_ieee754_ops_quad_to_int64,"
        !           464:                echo "                                fpreg_rs2, &fpreg_rd.tme_float_value_ieee754_double.tme_value64_int);"
        !           465:                echo "      break;"
        !           466:                echo "    }"
        !           467:                echo "#endif /* TME_HAVE_INT64_T */"
        !           468:                echo "    _TME_SPARC_FPU_UNIMPL;"
        !           469:                echo "    fpreg_rd_format = TME_IEEE754_FPREG_FORMAT_NULL;"
        !           470:                ;;
1.1       root      471:            fpop1:011001001)
                    472:                echo "  case ${opf_decimal}:  /* ${opf} FsTOd: */"
                    473:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_SINGLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    474:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_DOUBLE);"
                    475:                echo "    _TME_SPARC_FPU_OP_MONADIC(tme_ieee754_ops_double_from_single,"
                    476:                echo "                              fpreg_rs2, &fpreg_rd);"
                    477:                ;;
                    478:            fpop1:011001101)
                    479:                echo "  case ${opf_decimal}:  /* ${opf} FsTOq: */"
                    480:                echo "    ${quad}"
                    481:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_SINGLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    482:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_QUAD);"
                    483:                echo "    _TME_SPARC_FPU_OP_MONADIC(tme_ieee754_ops_quad_from_single,"
                    484:                echo "                              fpreg_rs2, &fpreg_rd);"
                    485:                ;;
                    486:            fpop1:011000110)
                    487:                echo "  case ${opf_decimal}:  /* ${opf} FdTOs: */"
                    488:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_DOUBLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    489:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_SINGLE);"
                    490:                echo "    _TME_SPARC_FPU_OP_MONADIC(tme_ieee754_ops_single_from_double,"
                    491:                echo "                              fpreg_rs2, &fpreg_rd);"
                    492:                ;;
                    493:            fpop1:011001110)
                    494:                echo "  case ${opf_decimal}:  /* ${opf} FdTOq: */"
                    495:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_DOUBLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    496:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_QUAD);"
                    497:                echo "    _TME_SPARC_FPU_OP_MONADIC(tme_ieee754_ops_quad_from_double,"
                    498:                echo "                              fpreg_rs2, &fpreg_rd);"
                    499:                ;;
                    500:            fpop1:011000111)
                    501:                echo "  case ${opf_decimal}:  /* ${opf} FqTOs: */"
                    502:                echo "    ${quad}"
                    503:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_QUAD | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    504:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_SINGLE);"
                    505:                echo "    _TME_SPARC_FPU_OP_MONADIC(tme_ieee754_ops_single_from_quad,"
                    506:                echo "                              fpreg_rs2, &fpreg_rd);"
                    507:                ;;
                    508:            fpop1:011001011)
                    509:                echo "  case ${opf_decimal}:  /* ${opf} FqTOd: */"
                    510:                echo "    ${quad}"
                    511:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_QUAD | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    512:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_DOUBLE);"
                    513:                echo "    _TME_SPARC_FPU_OP_MONADIC(tme_ieee754_ops_double_from_quad,"
                    514:                echo "                              fpreg_rs2, &fpreg_rd);"
                    515:                ;;
1.1.1.2 ! root      516:            fpop1:000000001 | fpop2:000000001)
        !           517:                echo "  case ${opf_decimal}:  /* ${opf} FMOVs${fmovcc}: */"
1.1       root      518:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_SINGLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    519:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_SINGLE);"
                    520:                echo "    _TME_SPARC_FPU_BEGIN;"
                    521:                echo "    fpreg_rd = *fpreg_rs2;"
                    522:                ;;
1.1.1.2 ! root      523:            fpop1:000000010 | fpop2:000000010)
        !           524:                echo "  case ${opf_decimal}:  /* ${opf} FMOVd${fmovcc}: */"
        !           525:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_DOUBLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
        !           526:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_DOUBLE);"
        !           527:                echo "    _TME_SPARC_FPU_BEGIN;"
        !           528:                echo "    fpreg_rd = *fpreg_rs2;"
        !           529:                ;;
1.1       root      530:            fpop1:000000101)
                    531:                echo "  case ${opf_decimal}:  /* ${opf} FNEGs: */"
                    532:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_SINGLE);"
                    533:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_SINGLE);"
                    534:                echo "    _TME_SPARC_FPU_BEGIN;"
                    535:                echo "    fpreg_rd = *fpreg_rs2;"
                    536:                echo "    fpreg_rd.tme_float_value_ieee754_single ^= 0x80000000;"
                    537:                ;;
1.1.1.2 ! root      538:            fpop1:000000110)
        !           539:                echo "  case ${opf_decimal}:  /* ${opf} FNEGd: */"
        !           540:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_DOUBLE);"
        !           541:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_DOUBLE);"
        !           542:                echo "    _TME_SPARC_FPU_BEGIN;"
        !           543:                echo "    fpreg_rd = *fpreg_rs2;"
        !           544:                echo "    fpreg_rd.tme_float_value_ieee754_double.tme_value64_uint32_hi ^= 0x80000000;"
        !           545:                ;;
1.1       root      546:            fpop1:000001001)
                    547:                echo "  case ${opf_decimal}:  /* ${opf} FABSs: */"
                    548:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_SINGLE);"
                    549:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_SINGLE);"
                    550:                echo "    _TME_SPARC_FPU_BEGIN;"
                    551:                echo "    fpreg_rd = *fpreg_rs2;"
                    552:                echo "    fpreg_rd.tme_float_value_ieee754_single &= ~0x80000000;"
                    553:                ;;
1.1.1.2 ! root      554:            fpop1:000001010)
        !           555:                echo "  case ${opf_decimal}:  /* ${opf} FABSd: */"
        !           556:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_DOUBLE);"
        !           557:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_DOUBLE);"
        !           558:                echo "    _TME_SPARC_FPU_BEGIN;"
        !           559:                echo "    fpreg_rd = *fpreg_rs2;"
        !           560:                echo "    fpreg_rd.tme_float_value_ieee754_double.tme_value64_uint32_hi &= ~0x80000000;"
        !           561:                ;;
1.1       root      562:            fpop1:000101001)
                    563:                echo "  case ${opf_decimal}:  /* ${opf} FSQRTs: */"
                    564:                echo "    _TME_SPARC_FPU_UNIMPL_IF(TME_SPARC_FPU_FLAG_NO_FSQRT);"
                    565:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_SINGLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    566:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_SINGLE);"
                    567:                echo "    _TME_SPARC_FPU_OP_MONADIC(tme_ieee754_ops_single_sqrt,"
                    568:                echo "                              fpreg_rs2, &fpreg_rd);"
                    569:                ;;
                    570:            fpop1:000101010)
                    571:                echo "  case ${opf_decimal}:  /* ${opf} FSQRTd: */"
                    572:                echo "    _TME_SPARC_FPU_UNIMPL_IF(TME_SPARC_FPU_FLAG_NO_FSQRT);"
                    573:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_DOUBLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    574:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_DOUBLE);"
                    575:                echo "    _TME_SPARC_FPU_OP_MONADIC(tme_ieee754_ops_double_sqrt,"
                    576:                echo "                              fpreg_rs2, &fpreg_rd);"
                    577:                ;;
                    578:            fpop1:000101011)
                    579:                echo "  case ${opf_decimal}:  /* ${opf} FSQRTq: */"
                    580:                echo "    _TME_SPARC_FPU_UNIMPL_IF(TME_SPARC_FPU_FLAG_NO_FSQRT | TME_SPARC_FPU_FLAG_NO_QUAD);"
                    581:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_QUAD | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    582:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_QUAD);"
                    583:                echo "    _TME_SPARC_FPU_OP_MONADIC(tme_ieee754_ops_quad_sqrt,"
                    584:                echo "                              fpreg_rs2, &fpreg_rd);"
                    585:                ;;
                    586:            fpop1:001000001)
                    587:                echo "  case ${opf_decimal}:  /* ${opf} FADDs: */"
                    588:                echo "    _TME_SPARC_FPU_FORMAT_RS1(TME_IEEE754_FPREG_FORMAT_SINGLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    589:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_SINGLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    590:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_SINGLE);"
                    591:                echo "    _TME_SPARC_FPU_OP_DYADIC(tme_ieee754_ops_single_add,"
                    592:                echo "                             fpreg_rs1, fpreg_rs2, &fpreg_rd);"
                    593:                ;;
                    594:            fpop1:001000010)
                    595:                echo "  case ${opf_decimal}:  /* ${opf} FADDd: */"
                    596:                echo "    _TME_SPARC_FPU_FORMAT_RS1(TME_IEEE754_FPREG_FORMAT_DOUBLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    597:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_DOUBLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    598:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_DOUBLE);"
                    599:                echo "    _TME_SPARC_FPU_OP_DYADIC(tme_ieee754_ops_double_add,"
                    600:                echo "                             fpreg_rs1, fpreg_rs2, &fpreg_rd);"
                    601:                ;;
                    602:            fpop1:001000011)
                    603:                echo "  case ${opf_decimal}:  /* ${opf} FADDq: */"
                    604:                echo "    ${quad}"
                    605:                echo "    _TME_SPARC_FPU_FORMAT_RS1(TME_IEEE754_FPREG_FORMAT_QUAD | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    606:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_QUAD | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    607:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_QUAD);"
                    608:                echo "    _TME_SPARC_FPU_OP_DYADIC(tme_ieee754_ops_quad_add,"
                    609:                echo "                             fpreg_rs1, fpreg_rs2, &fpreg_rd);"
                    610:                ;;
                    611:            fpop1:001000101)
                    612:                echo "  case ${opf_decimal}:  /* ${opf} FSUBs: */"
                    613:                echo "    _TME_SPARC_FPU_FORMAT_RS1(TME_IEEE754_FPREG_FORMAT_SINGLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    614:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_SINGLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    615:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_SINGLE);"
                    616:                echo "    _TME_SPARC_FPU_OP_DYADIC(tme_ieee754_ops_single_sub,"
                    617:                echo "                             fpreg_rs1, fpreg_rs2, &fpreg_rd);"
                    618:                ;;
                    619:            fpop1:001000110)
                    620:                echo "  case ${opf_decimal}:  /* ${opf} FSUBd: */"
                    621:                echo "    _TME_SPARC_FPU_FORMAT_RS1(TME_IEEE754_FPREG_FORMAT_DOUBLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    622:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_DOUBLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    623:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_DOUBLE);"
                    624:                echo "    _TME_SPARC_FPU_OP_DYADIC(tme_ieee754_ops_double_sub,"
                    625:                echo "                             fpreg_rs1, fpreg_rs2, &fpreg_rd);"
                    626:                ;;
                    627:            fpop1:001000111)
                    628:                echo "  case ${opf_decimal}:  /* ${opf} FSUBq: */"
                    629:                echo "    ${quad}"
                    630:                echo "    _TME_SPARC_FPU_FORMAT_RS1(TME_IEEE754_FPREG_FORMAT_QUAD | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    631:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_QUAD | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    632:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_QUAD);"
                    633:                echo "    _TME_SPARC_FPU_OP_DYADIC(tme_ieee754_ops_quad_sub,"
                    634:                echo "                             fpreg_rs1, fpreg_rs2, &fpreg_rd);"
                    635:                ;;
                    636:            fpop1:001001001)
                    637:                echo "  case ${opf_decimal}:  /* ${opf} FMULs: */"
                    638:                echo "    _TME_SPARC_FPU_FORMAT_RS1(TME_IEEE754_FPREG_FORMAT_SINGLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    639:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_SINGLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    640:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_SINGLE);"
                    641:                echo "    _TME_SPARC_FPU_OP_DYADIC(tme_ieee754_ops_single_mul,"
                    642:                echo "                             fpreg_rs1, fpreg_rs2, &fpreg_rd);"
                    643:                ;;
                    644:            fpop1:001001010)
                    645:                echo "  case ${opf_decimal}:  /* ${opf} FMULd: */"
                    646:                echo "    _TME_SPARC_FPU_FORMAT_RS1(TME_IEEE754_FPREG_FORMAT_DOUBLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    647:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_DOUBLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    648:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_DOUBLE);"
                    649:                echo "    _TME_SPARC_FPU_OP_DYADIC(tme_ieee754_ops_double_mul,"
                    650:                echo "                             fpreg_rs1, fpreg_rs2, &fpreg_rd);"
                    651:                ;;
                    652:            fpop1:001001011)
                    653:                echo "  case ${opf_decimal}:  /* ${opf} FMULq: */"
                    654:                echo "    ${quad}"
                    655:                echo "    _TME_SPARC_FPU_FORMAT_RS1(TME_IEEE754_FPREG_FORMAT_QUAD | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    656:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_QUAD | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    657:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_QUAD);"
                    658:                echo "    _TME_SPARC_FPU_OP_DYADIC(tme_ieee754_ops_quad_mul,"
                    659:                echo "                             fpreg_rs1, fpreg_rs2, &fpreg_rd);"
                    660:                ;;
                    661:            fpop1:001101001)
                    662:                echo "  case ${opf_decimal}:  /* ${opf} FsMULd: */"
                    663:                echo "    _TME_SPARC_FPU_UNIMPL_IF(TME_SPARC_FPU_FLAG_NO_FMUL_WIDER);"
                    664:                echo "    _TME_SPARC_FPU_FORMAT_RS1(TME_IEEE754_FPREG_FORMAT_SINGLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    665:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_SINGLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    666:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_DOUBLE);"
                    667:                echo "    _TME_SPARC_FPU_OP_MONADIC(tme_ieee754_ops_double_from_single,"
                    668:                echo "                              fpreg_rs1, &fpreg_rs1_buffer);"
                    669:                echo "    _TME_SPARC_FPU_OP_MONADIC(tme_ieee754_ops_double_from_single,"
                    670:                echo "                              fpreg_rs2, &fpreg_rs2_buffer);"
1.1.1.2 ! root      671:                echo "    _TME_SPARC_FPU_OP_DYADIC(tme_ieee754_ops_double_mul,"
1.1       root      672:                echo "                             &fpreg_rs1_buffer, &fpreg_rs2_buffer, &fpreg_rd);"
                    673:                ;;
                    674:            fpop1:001101110)
                    675:                echo "  case ${opf_decimal}:  /* ${opf} FdMULq: */"
                    676:                echo "    _TME_SPARC_FPU_UNIMPL_IF(TME_SPARC_FPU_FLAG_NO_FMUL_WIDER | TME_SPARC_FPU_FLAG_NO_QUAD);"
                    677:                echo "    _TME_SPARC_FPU_FORMAT_RS1(TME_IEEE754_FPREG_FORMAT_DOUBLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    678:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_DOUBLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    679:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_QUAD);"
                    680:                echo "    _TME_SPARC_FPU_OP_MONADIC(tme_ieee754_ops_quad_from_double,"
                    681:                echo "                              fpreg_rs1, &fpreg_rs1_buffer);"
                    682:                echo "    _TME_SPARC_FPU_OP_MONADIC(tme_ieee754_ops_quad_from_double,"
                    683:                echo "                              fpreg_rs2, &fpreg_rs2_buffer);"
                    684:                echo "    _TME_SPARC_FPU_OP_DYADIC(tme_ieee754_ops_quad_mul,"
                    685:                echo "                             &fpreg_rs1_buffer, &fpreg_rs2_buffer, &fpreg_rd);"
                    686:                ;;
                    687:            fpop1:001001101)
                    688:                echo "  case ${opf_decimal}:  /* ${opf} FDIVs: */"
                    689:                echo "    _TME_SPARC_FPU_FORMAT_RS1(TME_IEEE754_FPREG_FORMAT_SINGLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    690:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_SINGLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    691:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_SINGLE);"
                    692:                echo "    _TME_SPARC_FPU_OP_DYADIC(tme_ieee754_ops_single_div,"
                    693:                echo "                             fpreg_rs1, fpreg_rs2, &fpreg_rd);"
                    694:                ;;
                    695:            fpop1:001001110)
                    696:                echo "  case ${opf_decimal}:  /* ${opf} FDIVd: */"
                    697:                echo "    _TME_SPARC_FPU_FORMAT_RS1(TME_IEEE754_FPREG_FORMAT_DOUBLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    698:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_DOUBLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    699:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_DOUBLE);"
                    700:                echo "    _TME_SPARC_FPU_OP_DYADIC(tme_ieee754_ops_double_div,"
                    701:                echo "                             fpreg_rs1, fpreg_rs2, &fpreg_rd);"
                    702:                ;;
                    703:            fpop1:001001111)
                    704:                echo "  case ${opf_decimal}:  /* ${opf} FDIVq: */"
                    705:                echo "    ${quad}"
                    706:                echo "    _TME_SPARC_FPU_FORMAT_RS1(TME_IEEE754_FPREG_FORMAT_QUAD | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    707:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_QUAD | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    708:                echo "    _TME_SPARC_FPU_FORMAT_RD(TME_IEEE754_FPREG_FORMAT_QUAD);"
                    709:                echo "    _TME_SPARC_FPU_OP_DYADIC(tme_ieee754_ops_quad_div,"
                    710:                echo "                              fpreg_rs1, fpreg_rs2, &fpreg_rd);"
                    711:                ;;
                    712:            fpop2:001010001)
                    713:                echo "  case ${opf_decimal}:  /* ${opf} FCMPs: */"
                    714:                echo "    _TME_SPARC_FPU_FORMAT_RS1(TME_IEEE754_FPREG_FORMAT_SINGLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    715:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_SINGLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    716:                echo "    _TME_SPARC_FPU_OP_DYADIC(tme_ieee754_ops_single_sub,"
                    717:                echo "                             fpreg_rs1, fpreg_rs2, &fpreg_rd);"
                    718:                echo "    _tme_sparc_fpu_fcc_single(ic, &fpreg_rd, FALSE);"
                    719:                echo "    fpreg_rd_format = TME_IEEE754_FPREG_FORMAT_NULL;"
                    720:                ;;
                    721:            fpop2:001010010)
                    722:                echo "  case ${opf_decimal}:  /* ${opf} FCMPd: */"
                    723:                echo "    _TME_SPARC_FPU_FORMAT_RS1(TME_IEEE754_FPREG_FORMAT_DOUBLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    724:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_DOUBLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    725:                echo "    _TME_SPARC_FPU_OP_DYADIC(tme_ieee754_ops_double_sub,"
                    726:                echo "                             fpreg_rs1, fpreg_rs2, &fpreg_rd);"
                    727:                echo "    _tme_sparc_fpu_fcc_double(ic, &fpreg_rd, FALSE);"
                    728:                echo "    fpreg_rd_format = TME_IEEE754_FPREG_FORMAT_NULL;"
                    729:                ;;
                    730:            fpop2:001010011)
                    731:                echo "  case ${opf_decimal}:  /* ${opf} FCMPq: */"
                    732:                echo "    ${quad}"
                    733:                echo "    _TME_SPARC_FPU_FORMAT_RS1(TME_IEEE754_FPREG_FORMAT_QUAD | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    734:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_QUAD | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    735:                echo "    _TME_SPARC_FPU_OP_DYADIC(tme_ieee754_ops_quad_sub,"
                    736:                echo "                             fpreg_rs1, fpreg_rs2, &fpreg_rd);"
                    737:                echo "    _tme_sparc_fpu_fcc_quad(ic, &fpreg_rd, FALSE);"
                    738:                echo "    fpreg_rd_format = TME_IEEE754_FPREG_FORMAT_NULL;"
                    739:                ;;
                    740:            fpop2:001010101)
                    741:                echo "  case ${opf_decimal}:  /* ${opf} FCMPEs: */"
                    742:                echo "    _TME_SPARC_FPU_FORMAT_RS1(TME_IEEE754_FPREG_FORMAT_SINGLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    743:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_SINGLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    744:                echo "    _TME_SPARC_FPU_OP_DYADIC(tme_ieee754_ops_single_sub,"
                    745:                echo "                             fpreg_rs1, fpreg_rs2, &fpreg_rd);"
                    746:                echo "    _tme_sparc_fpu_fcc_single(ic, &fpreg_rd, TRUE);"
                    747:                echo "    fpreg_rd_format = TME_IEEE754_FPREG_FORMAT_NULL;"
                    748:                ;;
                    749:            fpop2:001010110)
                    750:                echo "  case ${opf_decimal}:  /* ${opf} FCMPEd: */"
                    751:                echo "    _TME_SPARC_FPU_FORMAT_RS1(TME_IEEE754_FPREG_FORMAT_DOUBLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    752:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_DOUBLE | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    753:                echo "    _TME_SPARC_FPU_OP_DYADIC(tme_ieee754_ops_double_sub,"
                    754:                echo "                             fpreg_rs1, fpreg_rs2, &fpreg_rd);"
                    755:                echo "    _tme_sparc_fpu_fcc_double(ic, &fpreg_rd, TRUE);"
                    756:                echo "    fpreg_rd_format = TME_IEEE754_FPREG_FORMAT_NULL;"
                    757:                ;;
                    758:            fpop2:001010111)
                    759:                echo "  case ${opf_decimal}:  /* ${opf} FCMPEq: */"
                    760:                echo "    ${quad}"
                    761:                echo "    _TME_SPARC_FPU_FORMAT_RS1(TME_IEEE754_FPREG_FORMAT_QUAD | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    762:                echo "    _TME_SPARC_FPU_FORMAT_RS2(TME_IEEE754_FPREG_FORMAT_QUAD | TME_IEEE754_FPREG_FORMAT_BUILTIN);"
                    763:                echo "    _TME_SPARC_FPU_OP_DYADIC(tme_ieee754_ops_quad_sub,"
                    764:                echo "                             fpreg_rs1, fpreg_rs2, &fpreg_rd);"
                    765:                echo "    _tme_sparc_fpu_fcc_quad(ic, &fpreg_rd, TRUE);"
                    766:                echo "    fpreg_rd_format = TME_IEEE754_FPREG_FORMAT_NULL;"
                    767:                ;;
                    768:            *) default=true ;;
                    769:            esac
                    770:            if $default; then :; else echo "    break;"; echo ""; fi
                    771:        done
1.1.1.2 ! root      772:        echo "  default:"
        !           773:        echo "    _TME_SPARC_FPU_UNIMPL;"
        !           774:        echo "    fpreg_rd_format = TME_IEEE754_FPREG_FORMAT_NULL;"
        !           775:        echo "    break;"
1.1       root      776:        echo ""
                    777:        echo "#undef _TME_SPARC_FPU_FORMAT_RS1"
                    778:        echo "#undef _TME_SPARC_FPU_FORMAT_RS2"
                    779:        echo "#undef _TME_SPARC_FPU_FORMAT_RD"
                    780:        echo "  }"
                    781: 
                    782:        echo ""
                    783:        echo "  /* store any destination: */"
                    784:        echo "  if (fpreg_rd_format != TME_IEEE754_FPREG_FORMAT_NULL) {"
                    785:        echo "    tme_sparc_fpu_fpreg_format(ic, fpreg_rd_number, fpreg_rd_format);"
                    786:        echo "    ic->tme_sparc_fpu_fpregs[fpreg_rd_number] = fpreg_rd;"
1.1.1.2 ! root      787:        echo "    TME_SPARC_FPU_DIRTY(ic, fpreg_rd_number);"
1.1       root      788:        echo "  }"
                    789: 
                    790:        echo ""
                    791:        echo "}"
                    792:    : 
                    793: done
                    794: 
                    795: # done:
                    796: #
                    797: exit 0

unix.superglobalmegacorp.com

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