Annotation of tme/ic/ieee754/ieee754-ops-auto.c, revision 1.1

1.1     ! root        1: /* automatically generated by ieee754-ops-auto.sh, do not edit! */
        !             2: #include <tme/common.h>
        !             3: _TME_RCSID("$Id: ieee754-ops-auto.sh,v 1.2 2005/03/23 11:47:37 fredette Exp $");
        !             4: 
        !             5: #include "softfloat-tme.h"
        !             6: #include <math.h>
        !             7: 
        !             8: /* this does a strict compliance single-precision add: */
        !             9: static void
        !            10: _tme_ieee754_strict_single_add(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !            11: {
        !            12:   tme_uint32_t src0_buffer;
        !            13:   tme_uint32_t src1_buffer;
        !            14:   int exceptions;
        !            15: 
        !            16:   /* enter softfloat operation: */
        !            17:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !            18:   tme_ieee754_global_ctl = ieee754_ctl;
        !            19:   tme_ieee754_global_exceptions = 0;
        !            20:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !            21: 
        !            22:   /* assume that this operation raises no exceptions: */
        !            23:   exceptions = 0;
        !            24: 
        !            25:   /* the operation: */
        !            26:   _tme_ieee754_single_value_set(dst, float32,
        !            27:     float32_add((*((const float32 *) tme_ieee754_single_value_get(src0, &src0_buffer))),
        !            28:                 (*((const float32 *) tme_ieee754_single_value_get(src1, &src1_buffer)))));
        !            29: 
        !            30:   /* leave softfloat operation: */
        !            31:   tme_ieee754_global_ctl = NULL;
        !            32:   exceptions |= tme_ieee754_global_exceptions;
        !            33:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !            34:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !            35: 
        !            36:   /* signal any exceptions: */
        !            37:   if (exceptions != 0) {
        !            38:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !            39:   }
        !            40: }
        !            41: 
        !            42: /* this does a strict compliance single-precision sub: */
        !            43: static void
        !            44: _tme_ieee754_strict_single_sub(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !            45: {
        !            46:   tme_uint32_t src0_buffer;
        !            47:   tme_uint32_t src1_buffer;
        !            48:   int exceptions;
        !            49: 
        !            50:   /* enter softfloat operation: */
        !            51:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !            52:   tme_ieee754_global_ctl = ieee754_ctl;
        !            53:   tme_ieee754_global_exceptions = 0;
        !            54:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !            55: 
        !            56:   /* assume that this operation raises no exceptions: */
        !            57:   exceptions = 0;
        !            58: 
        !            59:   /* the operation: */
        !            60:   _tme_ieee754_single_value_set(dst, float32,
        !            61:     float32_sub((*((const float32 *) tme_ieee754_single_value_get(src0, &src0_buffer))),
        !            62:                 (*((const float32 *) tme_ieee754_single_value_get(src1, &src1_buffer)))));
        !            63: 
        !            64:   /* leave softfloat operation: */
        !            65:   tme_ieee754_global_ctl = NULL;
        !            66:   exceptions |= tme_ieee754_global_exceptions;
        !            67:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !            68:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !            69: 
        !            70:   /* signal any exceptions: */
        !            71:   if (exceptions != 0) {
        !            72:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !            73:   }
        !            74: }
        !            75: 
        !            76: /* this does a strict compliance single-precision mul: */
        !            77: static void
        !            78: _tme_ieee754_strict_single_mul(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !            79: {
        !            80:   tme_uint32_t src0_buffer;
        !            81:   tme_uint32_t src1_buffer;
        !            82:   int exceptions;
        !            83: 
        !            84:   /* enter softfloat operation: */
        !            85:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !            86:   tme_ieee754_global_ctl = ieee754_ctl;
        !            87:   tme_ieee754_global_exceptions = 0;
        !            88:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !            89: 
        !            90:   /* assume that this operation raises no exceptions: */
        !            91:   exceptions = 0;
        !            92: 
        !            93:   /* the operation: */
        !            94:   _tme_ieee754_single_value_set(dst, float32,
        !            95:     float32_mul((*((const float32 *) tme_ieee754_single_value_get(src0, &src0_buffer))),
        !            96:                 (*((const float32 *) tme_ieee754_single_value_get(src1, &src1_buffer)))));
        !            97: 
        !            98:   /* leave softfloat operation: */
        !            99:   tme_ieee754_global_ctl = NULL;
        !           100:   exceptions |= tme_ieee754_global_exceptions;
        !           101:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !           102:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !           103: 
        !           104:   /* signal any exceptions: */
        !           105:   if (exceptions != 0) {
        !           106:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !           107:   }
        !           108: }
        !           109: 
        !           110: /* this does a strict compliance single-precision div: */
        !           111: static void
        !           112: _tme_ieee754_strict_single_div(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !           113: {
        !           114:   tme_uint32_t src0_buffer;
        !           115:   tme_uint32_t src1_buffer;
        !           116:   int exceptions;
        !           117: 
        !           118:   /* enter softfloat operation: */
        !           119:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !           120:   tme_ieee754_global_ctl = ieee754_ctl;
        !           121:   tme_ieee754_global_exceptions = 0;
        !           122:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !           123: 
        !           124:   /* assume that this operation raises no exceptions: */
        !           125:   exceptions = 0;
        !           126: 
        !           127:   /* the operation: */
        !           128:   _tme_ieee754_single_value_set(dst, float32,
        !           129:     float32_div((*((const float32 *) tme_ieee754_single_value_get(src0, &src0_buffer))),
        !           130:                 (*((const float32 *) tme_ieee754_single_value_get(src1, &src1_buffer)))));
        !           131: 
        !           132:   /* leave softfloat operation: */
        !           133:   tme_ieee754_global_ctl = NULL;
        !           134:   exceptions |= tme_ieee754_global_exceptions;
        !           135:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !           136:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !           137: 
        !           138:   /* signal any exceptions: */
        !           139:   if (exceptions != 0) {
        !           140:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !           141:   }
        !           142: }
        !           143: 
        !           144: /* this does a strict compliance single-precision rem: */
        !           145: static void
        !           146: _tme_ieee754_strict_single_rem(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !           147: {
        !           148:   tme_uint32_t src0_buffer;
        !           149:   tme_uint32_t src1_buffer;
        !           150:   int exceptions;
        !           151: 
        !           152:   /* enter softfloat operation: */
        !           153:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !           154:   tme_ieee754_global_ctl = ieee754_ctl;
        !           155:   tme_ieee754_global_exceptions = 0;
        !           156:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !           157: 
        !           158:   /* assume that this operation raises no exceptions: */
        !           159:   exceptions = 0;
        !           160: 
        !           161:   /* the operation: */
        !           162:   _tme_ieee754_single_value_set(dst, float32,
        !           163:     float32_rem((*((const float32 *) tme_ieee754_single_value_get(src0, &src0_buffer))),
        !           164:                 (*((const float32 *) tme_ieee754_single_value_get(src1, &src1_buffer)))));
        !           165: 
        !           166:   /* leave softfloat operation: */
        !           167:   tme_ieee754_global_ctl = NULL;
        !           168:   exceptions |= tme_ieee754_global_exceptions;
        !           169:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !           170:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !           171: 
        !           172:   /* signal any exceptions: */
        !           173:   if (exceptions != 0) {
        !           174:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !           175:   }
        !           176: }
        !           177: 
        !           178: /* this does a strict compliance single-precision sqrt: */
        !           179: static void
        !           180: _tme_ieee754_strict_single_sqrt(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !           181: {
        !           182:   tme_uint32_t src0_buffer;
        !           183:   int exceptions;
        !           184: 
        !           185:   /* enter softfloat operation: */
        !           186:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !           187:   tme_ieee754_global_ctl = ieee754_ctl;
        !           188:   tme_ieee754_global_exceptions = 0;
        !           189:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !           190: 
        !           191:   /* assume that this operation raises no exceptions: */
        !           192:   exceptions = 0;
        !           193: 
        !           194:   /* the operation: */
        !           195:   _tme_ieee754_single_value_set(dst, float32,
        !           196:     float32_sqrt((*((const float32 *) tme_ieee754_single_value_get(src0, &src0_buffer)))));
        !           197: 
        !           198:   /* leave softfloat operation: */
        !           199:   tme_ieee754_global_ctl = NULL;
        !           200:   exceptions |= tme_ieee754_global_exceptions;
        !           201:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !           202:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !           203: 
        !           204:   /* signal any exceptions: */
        !           205:   if (exceptions != 0) {
        !           206:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !           207:   }
        !           208: }
        !           209: 
        !           210: /* this does a strict compliance single-precision neg: */
        !           211: static void
        !           212: _tme_ieee754_strict_single_neg(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !           213: {
        !           214:   tme_uint32_t src0_buffer;
        !           215:   int exceptions;
        !           216: 
        !           217:   /* enter softfloat operation: */
        !           218:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !           219:   tme_ieee754_global_ctl = ieee754_ctl;
        !           220:   tme_ieee754_global_exceptions = 0;
        !           221:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !           222: 
        !           223:   /* assume that this operation raises no exceptions: */
        !           224:   exceptions = 0;
        !           225: 
        !           226:   /* the operation: */
        !           227:   _tme_ieee754_single_value_set(dst, float32,
        !           228:     float32_sub(int32_to_float32(0),
        !           229:                 (*((const float32 *) tme_ieee754_single_value_get(src0, &src0_buffer)))));
        !           230: 
        !           231:   /* leave softfloat operation: */
        !           232:   tme_ieee754_global_ctl = NULL;
        !           233:   exceptions |= tme_ieee754_global_exceptions;
        !           234:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !           235:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !           236: 
        !           237:   /* signal any exceptions: */
        !           238:   if (exceptions != 0) {
        !           239:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !           240:   }
        !           241: }
        !           242: 
        !           243: /* this does a strict compliance single-precision move: */
        !           244: static void
        !           245: _tme_ieee754_strict_single_move(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !           246: {
        !           247:   tme_uint32_t src0_buffer;
        !           248:   int exceptions;
        !           249: 
        !           250:   /* enter softfloat operation: */
        !           251:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !           252:   tme_ieee754_global_ctl = ieee754_ctl;
        !           253:   tme_ieee754_global_exceptions = 0;
        !           254:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !           255: 
        !           256:   /* assume that this operation raises no exceptions: */
        !           257:   exceptions = 0;
        !           258: 
        !           259:   /* the operation: */
        !           260:   _tme_ieee754_single_value_set(dst, float32,
        !           261:     float32_add((*((const float32 *) tme_ieee754_single_value_get(src0, &src0_buffer))),
        !           262:                 int32_to_float32(0)));
        !           263: 
        !           264:   /* leave softfloat operation: */
        !           265:   tme_ieee754_global_ctl = NULL;
        !           266:   exceptions |= tme_ieee754_global_exceptions;
        !           267:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !           268:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !           269: 
        !           270:   /* signal any exceptions: */
        !           271:   if (exceptions != 0) {
        !           272:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !           273:   }
        !           274: }
        !           275: 
        !           276: /* this does a strict compliance single-precision rint: */
        !           277: static void
        !           278: _tme_ieee754_strict_single_rint(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !           279: {
        !           280:   tme_uint32_t src0_buffer;
        !           281:   int exceptions;
        !           282: 
        !           283:   /* enter softfloat operation: */
        !           284:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !           285:   tme_ieee754_global_ctl = ieee754_ctl;
        !           286:   tme_ieee754_global_exceptions = 0;
        !           287:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !           288: 
        !           289:   /* assume that this operation raises no exceptions: */
        !           290:   exceptions = 0;
        !           291: 
        !           292:   /* the operation: */
        !           293:   _tme_ieee754_single_value_set(dst, float32,
        !           294:     float32_round_to_int((*((const float32 *) tme_ieee754_single_value_get(src0, &src0_buffer)))));
        !           295: 
        !           296:   /* leave softfloat operation: */
        !           297:   tme_ieee754_global_ctl = NULL;
        !           298:   exceptions |= tme_ieee754_global_exceptions;
        !           299:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !           300:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !           301: 
        !           302:   /* signal any exceptions: */
        !           303:   if (exceptions != 0) {
        !           304:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !           305:   }
        !           306: }
        !           307: 
        !           308: /* this does a strict compliance single-precision getexp: */
        !           309: static void
        !           310: _tme_ieee754_strict_single_getexp(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !           311: {
        !           312:   tme_uint32_t src0_buffer;
        !           313:   int exceptions;
        !           314: 
        !           315:   /* check for a NaN operand: */
        !           316:   if (__tme_predict_false(tme_ieee754_single_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !           317:     return;
        !           318:   }
        !           319: 
        !           320:   /* if the operand is an infinity: */
        !           321:   if (tme_ieee754_single_is_inf(src0)) {
        !           322: 
        !           323:     /* return a NaN: */
        !           324:     dst->tme_float_format = TME_FLOAT_FORMAT_IEEE754_SINGLE;
        !           325:     dst->tme_float_value_ieee754_single = ieee754_ctl->tme_ieee754_ctl_default_nan_single;
        !           326:     return;
        !           327:   }
        !           328: 
        !           329:   /* assume that this operation raises no exceptions: */
        !           330:   exceptions = 0;
        !           331: 
        !           332:   /* the operation: */
        !           333: 
        !           334:   /* if the operand is a zero, return a zero: */
        !           335:   if (tme_ieee754_single_is_zero(src0)) {
        !           336:     tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN, 0);
        !           337:   }
        !           338: 
        !           339:   /* otherwise, return the unbiased exponent: */
        !           340:   else {
        !           341:     tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN, TME_FIELD_MASK_EXTRACTU((*tme_ieee754_single_value_get(src0, &src0_buffer)), ((tme_uint32_t) 0x7f800000)) - ((((tme_uint32_t) 0x7f800000) / _TME_FIELD_MASK_FACTOR(((tme_uint32_t) 0x7f800000))) >> 1));
        !           342:   }
        !           343:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !           344: 
        !           345:   /* signal any exceptions: */
        !           346:   if (exceptions != 0) {
        !           347:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !           348:   }
        !           349: }
        !           350: 
        !           351: /* this does a strict compliance single-precision getman: */
        !           352: static void
        !           353: _tme_ieee754_strict_single_getman(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !           354: {
        !           355:   tme_uint32_t src0_buffer;
        !           356:   int exceptions;
        !           357: 
        !           358:   /* check for a NaN operand: */
        !           359:   if (__tme_predict_false(tme_ieee754_single_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !           360:     return;
        !           361:   }
        !           362: 
        !           363:   /* if the operand is an infinity: */
        !           364:   if (tme_ieee754_single_is_inf(src0)) {
        !           365: 
        !           366:     /* return a NaN: */
        !           367:     dst->tme_float_format = TME_FLOAT_FORMAT_IEEE754_SINGLE;
        !           368:     dst->tme_float_value_ieee754_single = ieee754_ctl->tme_ieee754_ctl_default_nan_single;
        !           369:     return;
        !           370:   }
        !           371: 
        !           372:   /* assume that this operation raises no exceptions: */
        !           373:   exceptions = 0;
        !           374: 
        !           375:   /* the operation: */
        !           376: 
        !           377:   /* if the operand is a zero, return it: */
        !           378:   if (tme_ieee754_single_is_zero(src0)) {
        !           379:     *dst = *src0;
        !           380:   }
        !           381: 
        !           382:   /* otherwise, return the operand, with its exponent set to biased zero: */
        !           383:   else {
        !           384:     tme_ieee754_single_value_set(dst, (*tme_ieee754_single_value_get(src0, &src0_buffer)));
        !           385:     TME_FIELD_MASK_DEPOSITU(dst->tme_float_value_ieee754_single, ((tme_uint32_t) 0x7f800000), ((((tme_uint32_t) 0x7f800000) / _TME_FIELD_MASK_FACTOR(((tme_uint32_t) 0x7f800000))) >> 1));
        !           386:   }
        !           387:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !           388: 
        !           389:   /* signal any exceptions: */
        !           390:   if (exceptions != 0) {
        !           391:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !           392:   }
        !           393: }
        !           394: 
        !           395: /* this does a strict compliance single-precision from-double: */
        !           396: static void
        !           397: _tme_ieee754_strict_single_from_double(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !           398: {
        !           399:   union tme_value64 src0_buffer;
        !           400:   int exceptions;
        !           401: 
        !           402:   /* enter softfloat operation: */
        !           403:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !           404:   tme_ieee754_global_ctl = ieee754_ctl;
        !           405:   tme_ieee754_global_exceptions = 0;
        !           406:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !           407: 
        !           408:   /* assume that this operation raises no exceptions: */
        !           409:   exceptions = 0;
        !           410: 
        !           411:   /* the operation: */
        !           412:   _tme_ieee754_single_value_set(dst, float32,
        !           413:     float64_to_float32((*((const float64 *) tme_ieee754_double_value_get(src0, &src0_buffer)))));
        !           414: 
        !           415:   /* leave softfloat operation: */
        !           416:   tme_ieee754_global_ctl = NULL;
        !           417:   exceptions |= tme_ieee754_global_exceptions;
        !           418:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !           419:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !           420: 
        !           421:   /* signal any exceptions: */
        !           422:   if (exceptions != 0) {
        !           423:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !           424:   }
        !           425: }
        !           426: 
        !           427: /* this does a strict compliance single-precision from-extended80: */
        !           428: static void
        !           429: _tme_ieee754_strict_single_from_extended80(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !           430: {
        !           431:   struct tme_float_ieee754_extended80 src0_buffer;
        !           432:   int exceptions;
        !           433: 
        !           434:   /* enter softfloat operation: */
        !           435:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !           436:   tme_ieee754_global_ctl = ieee754_ctl;
        !           437:   tme_ieee754_global_exceptions = 0;
        !           438:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !           439: 
        !           440:   /* assume that this operation raises no exceptions: */
        !           441:   exceptions = 0;
        !           442: 
        !           443:   /* the operation: */
        !           444:   _tme_ieee754_single_value_set(dst, float32,
        !           445:     floatx80_to_float32((*((const floatx80 *) tme_ieee754_extended80_value_get(src0, &src0_buffer)))));
        !           446: 
        !           447:   /* leave softfloat operation: */
        !           448:   tme_ieee754_global_ctl = NULL;
        !           449:   exceptions |= tme_ieee754_global_exceptions;
        !           450:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !           451:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !           452: 
        !           453:   /* signal any exceptions: */
        !           454:   if (exceptions != 0) {
        !           455:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !           456:   }
        !           457: }
        !           458: 
        !           459: /* this does a strict compliance single-precision from-quad: */
        !           460: static void
        !           461: _tme_ieee754_strict_single_from_quad(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !           462: {
        !           463:   struct tme_float_ieee754_quad src0_buffer;
        !           464:   int exceptions;
        !           465: 
        !           466:   /* enter softfloat operation: */
        !           467:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !           468:   tme_ieee754_global_ctl = ieee754_ctl;
        !           469:   tme_ieee754_global_exceptions = 0;
        !           470:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !           471: 
        !           472:   /* assume that this operation raises no exceptions: */
        !           473:   exceptions = 0;
        !           474: 
        !           475:   /* the operation: */
        !           476:   _tme_ieee754_single_value_set(dst, float32,
        !           477:     float128_to_float32((*((const float128 *) tme_ieee754_quad_value_get(src0, &src0_buffer)))));
        !           478: 
        !           479:   /* leave softfloat operation: */
        !           480:   tme_ieee754_global_ctl = NULL;
        !           481:   exceptions |= tme_ieee754_global_exceptions;
        !           482:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !           483:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !           484: 
        !           485:   /* signal any exceptions: */
        !           486:   if (exceptions != 0) {
        !           487:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !           488:   }
        !           489: }
        !           490: 
        !           491: /* this does a strict compliance single-precision to-int32: */
        !           492: static void
        !           493: _tme_ieee754_strict_single_to_int32(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, tme_int32_t *dst)
        !           494: {
        !           495:   tme_uint32_t src0_buffer;
        !           496:   int exceptions;
        !           497: 
        !           498:   /* enter softfloat operation: */
        !           499:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !           500:   tme_ieee754_global_ctl = ieee754_ctl;
        !           501:   tme_ieee754_global_exceptions = 0;
        !           502:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !           503: 
        !           504:   /* assume that this operation raises no exceptions: */
        !           505:   exceptions = 0;
        !           506: 
        !           507:   /* the operation: */
        !           508:   *dst = float32_to_int32((*((const float32 *) tme_ieee754_single_value_get(src0, &src0_buffer))));
        !           509: 
        !           510:   /* leave softfloat operation: */
        !           511:   tme_ieee754_global_ctl = NULL;
        !           512:   exceptions |= tme_ieee754_global_exceptions;
        !           513:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !           514:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !           515: 
        !           516:   /* signal any exceptions: */
        !           517:   if (exceptions != 0) {
        !           518:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !           519:   }
        !           520: }
        !           521: 
        !           522: /* this does a strict compliance double-precision add: */
        !           523: static void
        !           524: _tme_ieee754_strict_double_add(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !           525: {
        !           526:   union tme_value64 src0_buffer;
        !           527:   union tme_value64 src1_buffer;
        !           528:   int exceptions;
        !           529: 
        !           530:   /* enter softfloat operation: */
        !           531:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !           532:   tme_ieee754_global_ctl = ieee754_ctl;
        !           533:   tme_ieee754_global_exceptions = 0;
        !           534:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !           535: 
        !           536:   /* assume that this operation raises no exceptions: */
        !           537:   exceptions = 0;
        !           538: 
        !           539:   /* the operation: */
        !           540:   _tme_ieee754_double_value_set(dst, float64,
        !           541:     float64_add((*((const float64 *) tme_ieee754_double_value_get(src0, &src0_buffer))),
        !           542:                 (*((const float64 *) tme_ieee754_double_value_get(src1, &src1_buffer)))));
        !           543: 
        !           544:   /* leave softfloat operation: */
        !           545:   tme_ieee754_global_ctl = NULL;
        !           546:   exceptions |= tme_ieee754_global_exceptions;
        !           547:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !           548:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !           549: 
        !           550:   /* signal any exceptions: */
        !           551:   if (exceptions != 0) {
        !           552:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !           553:   }
        !           554: }
        !           555: 
        !           556: /* this does a strict compliance double-precision sub: */
        !           557: static void
        !           558: _tme_ieee754_strict_double_sub(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !           559: {
        !           560:   union tme_value64 src0_buffer;
        !           561:   union tme_value64 src1_buffer;
        !           562:   int exceptions;
        !           563: 
        !           564:   /* enter softfloat operation: */
        !           565:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !           566:   tme_ieee754_global_ctl = ieee754_ctl;
        !           567:   tme_ieee754_global_exceptions = 0;
        !           568:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !           569: 
        !           570:   /* assume that this operation raises no exceptions: */
        !           571:   exceptions = 0;
        !           572: 
        !           573:   /* the operation: */
        !           574:   _tme_ieee754_double_value_set(dst, float64,
        !           575:     float64_sub((*((const float64 *) tme_ieee754_double_value_get(src0, &src0_buffer))),
        !           576:                 (*((const float64 *) tme_ieee754_double_value_get(src1, &src1_buffer)))));
        !           577: 
        !           578:   /* leave softfloat operation: */
        !           579:   tme_ieee754_global_ctl = NULL;
        !           580:   exceptions |= tme_ieee754_global_exceptions;
        !           581:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !           582:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !           583: 
        !           584:   /* signal any exceptions: */
        !           585:   if (exceptions != 0) {
        !           586:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !           587:   }
        !           588: }
        !           589: 
        !           590: /* this does a strict compliance double-precision mul: */
        !           591: static void
        !           592: _tme_ieee754_strict_double_mul(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !           593: {
        !           594:   union tme_value64 src0_buffer;
        !           595:   union tme_value64 src1_buffer;
        !           596:   int exceptions;
        !           597: 
        !           598:   /* enter softfloat operation: */
        !           599:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !           600:   tme_ieee754_global_ctl = ieee754_ctl;
        !           601:   tme_ieee754_global_exceptions = 0;
        !           602:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !           603: 
        !           604:   /* assume that this operation raises no exceptions: */
        !           605:   exceptions = 0;
        !           606: 
        !           607:   /* the operation: */
        !           608:   _tme_ieee754_double_value_set(dst, float64,
        !           609:     float64_mul((*((const float64 *) tme_ieee754_double_value_get(src0, &src0_buffer))),
        !           610:                 (*((const float64 *) tme_ieee754_double_value_get(src1, &src1_buffer)))));
        !           611: 
        !           612:   /* leave softfloat operation: */
        !           613:   tme_ieee754_global_ctl = NULL;
        !           614:   exceptions |= tme_ieee754_global_exceptions;
        !           615:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !           616:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !           617: 
        !           618:   /* signal any exceptions: */
        !           619:   if (exceptions != 0) {
        !           620:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !           621:   }
        !           622: }
        !           623: 
        !           624: /* this does a strict compliance double-precision div: */
        !           625: static void
        !           626: _tme_ieee754_strict_double_div(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !           627: {
        !           628:   union tme_value64 src0_buffer;
        !           629:   union tme_value64 src1_buffer;
        !           630:   int exceptions;
        !           631: 
        !           632:   /* enter softfloat operation: */
        !           633:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !           634:   tme_ieee754_global_ctl = ieee754_ctl;
        !           635:   tme_ieee754_global_exceptions = 0;
        !           636:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !           637: 
        !           638:   /* assume that this operation raises no exceptions: */
        !           639:   exceptions = 0;
        !           640: 
        !           641:   /* the operation: */
        !           642:   _tme_ieee754_double_value_set(dst, float64,
        !           643:     float64_div((*((const float64 *) tme_ieee754_double_value_get(src0, &src0_buffer))),
        !           644:                 (*((const float64 *) tme_ieee754_double_value_get(src1, &src1_buffer)))));
        !           645: 
        !           646:   /* leave softfloat operation: */
        !           647:   tme_ieee754_global_ctl = NULL;
        !           648:   exceptions |= tme_ieee754_global_exceptions;
        !           649:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !           650:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !           651: 
        !           652:   /* signal any exceptions: */
        !           653:   if (exceptions != 0) {
        !           654:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !           655:   }
        !           656: }
        !           657: 
        !           658: /* this does a strict compliance double-precision rem: */
        !           659: static void
        !           660: _tme_ieee754_strict_double_rem(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !           661: {
        !           662:   union tme_value64 src0_buffer;
        !           663:   union tme_value64 src1_buffer;
        !           664:   int exceptions;
        !           665: 
        !           666:   /* enter softfloat operation: */
        !           667:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !           668:   tme_ieee754_global_ctl = ieee754_ctl;
        !           669:   tme_ieee754_global_exceptions = 0;
        !           670:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !           671: 
        !           672:   /* assume that this operation raises no exceptions: */
        !           673:   exceptions = 0;
        !           674: 
        !           675:   /* the operation: */
        !           676:   _tme_ieee754_double_value_set(dst, float64,
        !           677:     float64_rem((*((const float64 *) tme_ieee754_double_value_get(src0, &src0_buffer))),
        !           678:                 (*((const float64 *) tme_ieee754_double_value_get(src1, &src1_buffer)))));
        !           679: 
        !           680:   /* leave softfloat operation: */
        !           681:   tme_ieee754_global_ctl = NULL;
        !           682:   exceptions |= tme_ieee754_global_exceptions;
        !           683:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !           684:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !           685: 
        !           686:   /* signal any exceptions: */
        !           687:   if (exceptions != 0) {
        !           688:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !           689:   }
        !           690: }
        !           691: 
        !           692: /* this does a strict compliance double-precision sqrt: */
        !           693: static void
        !           694: _tme_ieee754_strict_double_sqrt(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !           695: {
        !           696:   union tme_value64 src0_buffer;
        !           697:   int exceptions;
        !           698: 
        !           699:   /* enter softfloat operation: */
        !           700:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !           701:   tme_ieee754_global_ctl = ieee754_ctl;
        !           702:   tme_ieee754_global_exceptions = 0;
        !           703:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !           704: 
        !           705:   /* assume that this operation raises no exceptions: */
        !           706:   exceptions = 0;
        !           707: 
        !           708:   /* the operation: */
        !           709:   _tme_ieee754_double_value_set(dst, float64,
        !           710:     float64_sqrt((*((const float64 *) tme_ieee754_double_value_get(src0, &src0_buffer)))));
        !           711: 
        !           712:   /* leave softfloat operation: */
        !           713:   tme_ieee754_global_ctl = NULL;
        !           714:   exceptions |= tme_ieee754_global_exceptions;
        !           715:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !           716:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !           717: 
        !           718:   /* signal any exceptions: */
        !           719:   if (exceptions != 0) {
        !           720:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !           721:   }
        !           722: }
        !           723: 
        !           724: /* this does a strict compliance double-precision neg: */
        !           725: static void
        !           726: _tme_ieee754_strict_double_neg(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !           727: {
        !           728:   union tme_value64 src0_buffer;
        !           729:   int exceptions;
        !           730: 
        !           731:   /* enter softfloat operation: */
        !           732:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !           733:   tme_ieee754_global_ctl = ieee754_ctl;
        !           734:   tme_ieee754_global_exceptions = 0;
        !           735:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !           736: 
        !           737:   /* assume that this operation raises no exceptions: */
        !           738:   exceptions = 0;
        !           739: 
        !           740:   /* the operation: */
        !           741:   _tme_ieee754_double_value_set(dst, float64,
        !           742:     float64_sub(int32_to_float64(0),
        !           743:                 (*((const float64 *) tme_ieee754_double_value_get(src0, &src0_buffer)))));
        !           744: 
        !           745:   /* leave softfloat operation: */
        !           746:   tme_ieee754_global_ctl = NULL;
        !           747:   exceptions |= tme_ieee754_global_exceptions;
        !           748:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !           749:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !           750: 
        !           751:   /* signal any exceptions: */
        !           752:   if (exceptions != 0) {
        !           753:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !           754:   }
        !           755: }
        !           756: 
        !           757: /* this does a strict compliance double-precision move: */
        !           758: static void
        !           759: _tme_ieee754_strict_double_move(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !           760: {
        !           761:   union tme_value64 src0_buffer;
        !           762:   int exceptions;
        !           763: 
        !           764:   /* enter softfloat operation: */
        !           765:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !           766:   tme_ieee754_global_ctl = ieee754_ctl;
        !           767:   tme_ieee754_global_exceptions = 0;
        !           768:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !           769: 
        !           770:   /* assume that this operation raises no exceptions: */
        !           771:   exceptions = 0;
        !           772: 
        !           773:   /* the operation: */
        !           774:   _tme_ieee754_double_value_set(dst, float64,
        !           775:     float64_add((*((const float64 *) tme_ieee754_double_value_get(src0, &src0_buffer))),
        !           776:                 int32_to_float64(0)));
        !           777: 
        !           778:   /* leave softfloat operation: */
        !           779:   tme_ieee754_global_ctl = NULL;
        !           780:   exceptions |= tme_ieee754_global_exceptions;
        !           781:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !           782:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !           783: 
        !           784:   /* signal any exceptions: */
        !           785:   if (exceptions != 0) {
        !           786:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !           787:   }
        !           788: }
        !           789: 
        !           790: /* this does a strict compliance double-precision rint: */
        !           791: static void
        !           792: _tme_ieee754_strict_double_rint(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !           793: {
        !           794:   union tme_value64 src0_buffer;
        !           795:   int exceptions;
        !           796: 
        !           797:   /* enter softfloat operation: */
        !           798:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !           799:   tme_ieee754_global_ctl = ieee754_ctl;
        !           800:   tme_ieee754_global_exceptions = 0;
        !           801:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !           802: 
        !           803:   /* assume that this operation raises no exceptions: */
        !           804:   exceptions = 0;
        !           805: 
        !           806:   /* the operation: */
        !           807:   _tme_ieee754_double_value_set(dst, float64,
        !           808:     float64_round_to_int((*((const float64 *) tme_ieee754_double_value_get(src0, &src0_buffer)))));
        !           809: 
        !           810:   /* leave softfloat operation: */
        !           811:   tme_ieee754_global_ctl = NULL;
        !           812:   exceptions |= tme_ieee754_global_exceptions;
        !           813:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !           814:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !           815: 
        !           816:   /* signal any exceptions: */
        !           817:   if (exceptions != 0) {
        !           818:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !           819:   }
        !           820: }
        !           821: 
        !           822: /* this does a strict compliance double-precision getexp: */
        !           823: static void
        !           824: _tme_ieee754_strict_double_getexp(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !           825: {
        !           826:   union tme_value64 src0_buffer;
        !           827:   int exceptions;
        !           828: 
        !           829:   /* check for a NaN operand: */
        !           830:   if (__tme_predict_false(tme_ieee754_double_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !           831:     return;
        !           832:   }
        !           833: 
        !           834:   /* if the operand is an infinity: */
        !           835:   if (tme_ieee754_double_is_inf(src0)) {
        !           836: 
        !           837:     /* return a NaN: */
        !           838:     dst->tme_float_format = TME_FLOAT_FORMAT_IEEE754_DOUBLE;
        !           839:     dst->tme_float_value_ieee754_double = ieee754_ctl->tme_ieee754_ctl_default_nan_double;
        !           840:     return;
        !           841:   }
        !           842: 
        !           843:   /* assume that this operation raises no exceptions: */
        !           844:   exceptions = 0;
        !           845: 
        !           846:   /* the operation: */
        !           847: 
        !           848:   /* if the operand is a zero, return a zero: */
        !           849:   if (tme_ieee754_double_is_zero(src0)) {
        !           850:     tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN, 0);
        !           851:   }
        !           852: 
        !           853:   /* otherwise, return the unbiased exponent: */
        !           854:   else {
        !           855:     tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN, TME_FIELD_MASK_EXTRACTU((*tme_ieee754_double_value_get(src0, &src0_buffer)).tme_value64_uint32_hi, ((tme_uint32_t) 0x7ff00000)) - ((((tme_uint32_t) 0x7ff00000) / _TME_FIELD_MASK_FACTOR(((tme_uint32_t) 0x7ff00000))) >> 1));
        !           856:   }
        !           857:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !           858: 
        !           859:   /* signal any exceptions: */
        !           860:   if (exceptions != 0) {
        !           861:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !           862:   }
        !           863: }
        !           864: 
        !           865: /* this does a strict compliance double-precision getman: */
        !           866: static void
        !           867: _tme_ieee754_strict_double_getman(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !           868: {
        !           869:   union tme_value64 src0_buffer;
        !           870:   int exceptions;
        !           871: 
        !           872:   /* check for a NaN operand: */
        !           873:   if (__tme_predict_false(tme_ieee754_double_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !           874:     return;
        !           875:   }
        !           876: 
        !           877:   /* if the operand is an infinity: */
        !           878:   if (tme_ieee754_double_is_inf(src0)) {
        !           879: 
        !           880:     /* return a NaN: */
        !           881:     dst->tme_float_format = TME_FLOAT_FORMAT_IEEE754_DOUBLE;
        !           882:     dst->tme_float_value_ieee754_double = ieee754_ctl->tme_ieee754_ctl_default_nan_double;
        !           883:     return;
        !           884:   }
        !           885: 
        !           886:   /* assume that this operation raises no exceptions: */
        !           887:   exceptions = 0;
        !           888: 
        !           889:   /* the operation: */
        !           890: 
        !           891:   /* if the operand is a zero, return it: */
        !           892:   if (tme_ieee754_double_is_zero(src0)) {
        !           893:     *dst = *src0;
        !           894:   }
        !           895: 
        !           896:   /* otherwise, return the operand, with its exponent set to biased zero: */
        !           897:   else {
        !           898:     tme_ieee754_double_value_set(dst, (*tme_ieee754_double_value_get(src0, &src0_buffer)));
        !           899:     TME_FIELD_MASK_DEPOSITU(dst->tme_float_value_ieee754_double.tme_value64_uint32_hi, ((tme_uint32_t) 0x7ff00000), ((((tme_uint32_t) 0x7ff00000) / _TME_FIELD_MASK_FACTOR(((tme_uint32_t) 0x7ff00000))) >> 1));
        !           900:   }
        !           901:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !           902: 
        !           903:   /* signal any exceptions: */
        !           904:   if (exceptions != 0) {
        !           905:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !           906:   }
        !           907: }
        !           908: 
        !           909: /* this does a strict compliance double-precision from-single: */
        !           910: static void
        !           911: _tme_ieee754_strict_double_from_single(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !           912: {
        !           913:   tme_uint32_t src0_buffer;
        !           914:   int exceptions;
        !           915: 
        !           916:   /* enter softfloat operation: */
        !           917:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !           918:   tme_ieee754_global_ctl = ieee754_ctl;
        !           919:   tme_ieee754_global_exceptions = 0;
        !           920:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !           921: 
        !           922:   /* assume that this operation raises no exceptions: */
        !           923:   exceptions = 0;
        !           924: 
        !           925:   /* the operation: */
        !           926:   _tme_ieee754_double_value_set(dst, float64,
        !           927:     float32_to_float64((*((const float32 *) tme_ieee754_single_value_get(src0, &src0_buffer)))));
        !           928: 
        !           929:   /* leave softfloat operation: */
        !           930:   tme_ieee754_global_ctl = NULL;
        !           931:   exceptions |= tme_ieee754_global_exceptions;
        !           932:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !           933:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !           934: 
        !           935:   /* signal any exceptions: */
        !           936:   if (exceptions != 0) {
        !           937:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !           938:   }
        !           939: }
        !           940: 
        !           941: /* this does a strict compliance double-precision from-extended80: */
        !           942: static void
        !           943: _tme_ieee754_strict_double_from_extended80(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !           944: {
        !           945:   struct tme_float_ieee754_extended80 src0_buffer;
        !           946:   int exceptions;
        !           947: 
        !           948:   /* enter softfloat operation: */
        !           949:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !           950:   tme_ieee754_global_ctl = ieee754_ctl;
        !           951:   tme_ieee754_global_exceptions = 0;
        !           952:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !           953: 
        !           954:   /* assume that this operation raises no exceptions: */
        !           955:   exceptions = 0;
        !           956: 
        !           957:   /* the operation: */
        !           958:   _tme_ieee754_double_value_set(dst, float64,
        !           959:     floatx80_to_float64((*((const floatx80 *) tme_ieee754_extended80_value_get(src0, &src0_buffer)))));
        !           960: 
        !           961:   /* leave softfloat operation: */
        !           962:   tme_ieee754_global_ctl = NULL;
        !           963:   exceptions |= tme_ieee754_global_exceptions;
        !           964:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !           965:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !           966: 
        !           967:   /* signal any exceptions: */
        !           968:   if (exceptions != 0) {
        !           969:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !           970:   }
        !           971: }
        !           972: 
        !           973: /* this does a strict compliance double-precision from-quad: */
        !           974: static void
        !           975: _tme_ieee754_strict_double_from_quad(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !           976: {
        !           977:   struct tme_float_ieee754_quad src0_buffer;
        !           978:   int exceptions;
        !           979: 
        !           980:   /* enter softfloat operation: */
        !           981:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !           982:   tme_ieee754_global_ctl = ieee754_ctl;
        !           983:   tme_ieee754_global_exceptions = 0;
        !           984:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !           985: 
        !           986:   /* assume that this operation raises no exceptions: */
        !           987:   exceptions = 0;
        !           988: 
        !           989:   /* the operation: */
        !           990:   _tme_ieee754_double_value_set(dst, float64,
        !           991:     float128_to_float64((*((const float128 *) tme_ieee754_quad_value_get(src0, &src0_buffer)))));
        !           992: 
        !           993:   /* leave softfloat operation: */
        !           994:   tme_ieee754_global_ctl = NULL;
        !           995:   exceptions |= tme_ieee754_global_exceptions;
        !           996:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !           997:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !           998: 
        !           999:   /* signal any exceptions: */
        !          1000:   if (exceptions != 0) {
        !          1001:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          1002:   }
        !          1003: }
        !          1004: 
        !          1005: /* this does a strict compliance double-precision to-int32: */
        !          1006: static void
        !          1007: _tme_ieee754_strict_double_to_int32(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, tme_int32_t *dst)
        !          1008: {
        !          1009:   union tme_value64 src0_buffer;
        !          1010:   int exceptions;
        !          1011: 
        !          1012:   /* enter softfloat operation: */
        !          1013:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !          1014:   tme_ieee754_global_ctl = ieee754_ctl;
        !          1015:   tme_ieee754_global_exceptions = 0;
        !          1016:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !          1017: 
        !          1018:   /* assume that this operation raises no exceptions: */
        !          1019:   exceptions = 0;
        !          1020: 
        !          1021:   /* the operation: */
        !          1022:   *dst = float64_to_int32((*((const float64 *) tme_ieee754_double_value_get(src0, &src0_buffer))));
        !          1023: 
        !          1024:   /* leave softfloat operation: */
        !          1025:   tme_ieee754_global_ctl = NULL;
        !          1026:   exceptions |= tme_ieee754_global_exceptions;
        !          1027:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !          1028:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          1029: 
        !          1030:   /* signal any exceptions: */
        !          1031:   if (exceptions != 0) {
        !          1032:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          1033:   }
        !          1034: }
        !          1035: 
        !          1036: #if defined(TME_HAVE_INT64_T)
        !          1037: 
        !          1038: /* this does a strict compliance extended80-precision add: */
        !          1039: static void
        !          1040: _tme_ieee754_strict_extended80_add(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          1041: {
        !          1042:   struct tme_float_ieee754_extended80 src0_buffer;
        !          1043:   struct tme_float_ieee754_extended80 src1_buffer;
        !          1044:   int exceptions;
        !          1045: 
        !          1046:   /* enter softfloat operation: */
        !          1047:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !          1048:   tme_ieee754_global_ctl = ieee754_ctl;
        !          1049:   tme_ieee754_global_exceptions = 0;
        !          1050:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !          1051: 
        !          1052:   /* assume that this operation raises no exceptions: */
        !          1053:   exceptions = 0;
        !          1054: 
        !          1055:   /* the operation: */
        !          1056:   _tme_ieee754_extended80_value_set(dst, floatx80,
        !          1057:     floatx80_add((*((const floatx80 *) tme_ieee754_extended80_value_get(src0, &src0_buffer))),
        !          1058:                 (*((const floatx80 *) tme_ieee754_extended80_value_get(src1, &src1_buffer)))));
        !          1059: 
        !          1060:   /* leave softfloat operation: */
        !          1061:   tme_ieee754_global_ctl = NULL;
        !          1062:   exceptions |= tme_ieee754_global_exceptions;
        !          1063:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !          1064:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          1065: 
        !          1066:   /* signal any exceptions: */
        !          1067:   if (exceptions != 0) {
        !          1068:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          1069:   }
        !          1070: }
        !          1071: 
        !          1072: #endif /* defined(TME_HAVE_INT64_T) */
        !          1073: 
        !          1074: #if defined(TME_HAVE_INT64_T)
        !          1075: 
        !          1076: /* this does a strict compliance extended80-precision sub: */
        !          1077: static void
        !          1078: _tme_ieee754_strict_extended80_sub(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          1079: {
        !          1080:   struct tme_float_ieee754_extended80 src0_buffer;
        !          1081:   struct tme_float_ieee754_extended80 src1_buffer;
        !          1082:   int exceptions;
        !          1083: 
        !          1084:   /* enter softfloat operation: */
        !          1085:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !          1086:   tme_ieee754_global_ctl = ieee754_ctl;
        !          1087:   tme_ieee754_global_exceptions = 0;
        !          1088:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !          1089: 
        !          1090:   /* assume that this operation raises no exceptions: */
        !          1091:   exceptions = 0;
        !          1092: 
        !          1093:   /* the operation: */
        !          1094:   _tme_ieee754_extended80_value_set(dst, floatx80,
        !          1095:     floatx80_sub((*((const floatx80 *) tme_ieee754_extended80_value_get(src0, &src0_buffer))),
        !          1096:                 (*((const floatx80 *) tme_ieee754_extended80_value_get(src1, &src1_buffer)))));
        !          1097: 
        !          1098:   /* leave softfloat operation: */
        !          1099:   tme_ieee754_global_ctl = NULL;
        !          1100:   exceptions |= tme_ieee754_global_exceptions;
        !          1101:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !          1102:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          1103: 
        !          1104:   /* signal any exceptions: */
        !          1105:   if (exceptions != 0) {
        !          1106:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          1107:   }
        !          1108: }
        !          1109: 
        !          1110: #endif /* defined(TME_HAVE_INT64_T) */
        !          1111: 
        !          1112: #if defined(TME_HAVE_INT64_T)
        !          1113: 
        !          1114: /* this does a strict compliance extended80-precision mul: */
        !          1115: static void
        !          1116: _tme_ieee754_strict_extended80_mul(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          1117: {
        !          1118:   struct tme_float_ieee754_extended80 src0_buffer;
        !          1119:   struct tme_float_ieee754_extended80 src1_buffer;
        !          1120:   int exceptions;
        !          1121: 
        !          1122:   /* enter softfloat operation: */
        !          1123:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !          1124:   tme_ieee754_global_ctl = ieee754_ctl;
        !          1125:   tme_ieee754_global_exceptions = 0;
        !          1126:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !          1127: 
        !          1128:   /* assume that this operation raises no exceptions: */
        !          1129:   exceptions = 0;
        !          1130: 
        !          1131:   /* the operation: */
        !          1132:   _tme_ieee754_extended80_value_set(dst, floatx80,
        !          1133:     floatx80_mul((*((const floatx80 *) tme_ieee754_extended80_value_get(src0, &src0_buffer))),
        !          1134:                 (*((const floatx80 *) tme_ieee754_extended80_value_get(src1, &src1_buffer)))));
        !          1135: 
        !          1136:   /* leave softfloat operation: */
        !          1137:   tme_ieee754_global_ctl = NULL;
        !          1138:   exceptions |= tme_ieee754_global_exceptions;
        !          1139:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !          1140:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          1141: 
        !          1142:   /* signal any exceptions: */
        !          1143:   if (exceptions != 0) {
        !          1144:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          1145:   }
        !          1146: }
        !          1147: 
        !          1148: #endif /* defined(TME_HAVE_INT64_T) */
        !          1149: 
        !          1150: #if defined(TME_HAVE_INT64_T)
        !          1151: 
        !          1152: /* this does a strict compliance extended80-precision div: */
        !          1153: static void
        !          1154: _tme_ieee754_strict_extended80_div(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          1155: {
        !          1156:   struct tme_float_ieee754_extended80 src0_buffer;
        !          1157:   struct tme_float_ieee754_extended80 src1_buffer;
        !          1158:   int exceptions;
        !          1159: 
        !          1160:   /* enter softfloat operation: */
        !          1161:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !          1162:   tme_ieee754_global_ctl = ieee754_ctl;
        !          1163:   tme_ieee754_global_exceptions = 0;
        !          1164:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !          1165: 
        !          1166:   /* assume that this operation raises no exceptions: */
        !          1167:   exceptions = 0;
        !          1168: 
        !          1169:   /* the operation: */
        !          1170:   _tme_ieee754_extended80_value_set(dst, floatx80,
        !          1171:     floatx80_div((*((const floatx80 *) tme_ieee754_extended80_value_get(src0, &src0_buffer))),
        !          1172:                 (*((const floatx80 *) tme_ieee754_extended80_value_get(src1, &src1_buffer)))));
        !          1173: 
        !          1174:   /* leave softfloat operation: */
        !          1175:   tme_ieee754_global_ctl = NULL;
        !          1176:   exceptions |= tme_ieee754_global_exceptions;
        !          1177:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !          1178:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          1179: 
        !          1180:   /* signal any exceptions: */
        !          1181:   if (exceptions != 0) {
        !          1182:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          1183:   }
        !          1184: }
        !          1185: 
        !          1186: #endif /* defined(TME_HAVE_INT64_T) */
        !          1187: 
        !          1188: #if defined(TME_HAVE_INT64_T)
        !          1189: 
        !          1190: /* this does a strict compliance extended80-precision rem: */
        !          1191: static void
        !          1192: _tme_ieee754_strict_extended80_rem(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          1193: {
        !          1194:   struct tme_float_ieee754_extended80 src0_buffer;
        !          1195:   struct tme_float_ieee754_extended80 src1_buffer;
        !          1196:   int exceptions;
        !          1197: 
        !          1198:   /* enter softfloat operation: */
        !          1199:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !          1200:   tme_ieee754_global_ctl = ieee754_ctl;
        !          1201:   tme_ieee754_global_exceptions = 0;
        !          1202:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !          1203: 
        !          1204:   /* assume that this operation raises no exceptions: */
        !          1205:   exceptions = 0;
        !          1206: 
        !          1207:   /* the operation: */
        !          1208:   _tme_ieee754_extended80_value_set(dst, floatx80,
        !          1209:     floatx80_rem((*((const floatx80 *) tme_ieee754_extended80_value_get(src0, &src0_buffer))),
        !          1210:                 (*((const floatx80 *) tme_ieee754_extended80_value_get(src1, &src1_buffer)))));
        !          1211: 
        !          1212:   /* leave softfloat operation: */
        !          1213:   tme_ieee754_global_ctl = NULL;
        !          1214:   exceptions |= tme_ieee754_global_exceptions;
        !          1215:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !          1216:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          1217: 
        !          1218:   /* signal any exceptions: */
        !          1219:   if (exceptions != 0) {
        !          1220:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          1221:   }
        !          1222: }
        !          1223: 
        !          1224: #endif /* defined(TME_HAVE_INT64_T) */
        !          1225: 
        !          1226: #if defined(TME_HAVE_INT64_T)
        !          1227: 
        !          1228: /* this does a strict compliance extended80-precision sqrt: */
        !          1229: static void
        !          1230: _tme_ieee754_strict_extended80_sqrt(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          1231: {
        !          1232:   struct tme_float_ieee754_extended80 src0_buffer;
        !          1233:   int exceptions;
        !          1234: 
        !          1235:   /* enter softfloat operation: */
        !          1236:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !          1237:   tme_ieee754_global_ctl = ieee754_ctl;
        !          1238:   tme_ieee754_global_exceptions = 0;
        !          1239:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !          1240: 
        !          1241:   /* assume that this operation raises no exceptions: */
        !          1242:   exceptions = 0;
        !          1243: 
        !          1244:   /* the operation: */
        !          1245:   _tme_ieee754_extended80_value_set(dst, floatx80,
        !          1246:     floatx80_sqrt((*((const floatx80 *) tme_ieee754_extended80_value_get(src0, &src0_buffer)))));
        !          1247: 
        !          1248:   /* leave softfloat operation: */
        !          1249:   tme_ieee754_global_ctl = NULL;
        !          1250:   exceptions |= tme_ieee754_global_exceptions;
        !          1251:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !          1252:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          1253: 
        !          1254:   /* signal any exceptions: */
        !          1255:   if (exceptions != 0) {
        !          1256:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          1257:   }
        !          1258: }
        !          1259: 
        !          1260: #endif /* defined(TME_HAVE_INT64_T) */
        !          1261: 
        !          1262: #if defined(TME_HAVE_INT64_T)
        !          1263: 
        !          1264: /* this does a strict compliance extended80-precision neg: */
        !          1265: static void
        !          1266: _tme_ieee754_strict_extended80_neg(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          1267: {
        !          1268:   struct tme_float_ieee754_extended80 src0_buffer;
        !          1269:   int exceptions;
        !          1270: 
        !          1271:   /* enter softfloat operation: */
        !          1272:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !          1273:   tme_ieee754_global_ctl = ieee754_ctl;
        !          1274:   tme_ieee754_global_exceptions = 0;
        !          1275:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !          1276: 
        !          1277:   /* assume that this operation raises no exceptions: */
        !          1278:   exceptions = 0;
        !          1279: 
        !          1280:   /* the operation: */
        !          1281:   _tme_ieee754_extended80_value_set(dst, floatx80,
        !          1282:     floatx80_sub(int32_to_floatx80(0),
        !          1283:                 (*((const floatx80 *) tme_ieee754_extended80_value_get(src0, &src0_buffer)))));
        !          1284: 
        !          1285:   /* leave softfloat operation: */
        !          1286:   tme_ieee754_global_ctl = NULL;
        !          1287:   exceptions |= tme_ieee754_global_exceptions;
        !          1288:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !          1289:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          1290: 
        !          1291:   /* signal any exceptions: */
        !          1292:   if (exceptions != 0) {
        !          1293:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          1294:   }
        !          1295: }
        !          1296: 
        !          1297: #endif /* defined(TME_HAVE_INT64_T) */
        !          1298: 
        !          1299: #if defined(TME_HAVE_INT64_T)
        !          1300: 
        !          1301: /* this does a strict compliance extended80-precision move: */
        !          1302: static void
        !          1303: _tme_ieee754_strict_extended80_move(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          1304: {
        !          1305:   struct tme_float_ieee754_extended80 src0_buffer;
        !          1306:   int exceptions;
        !          1307: 
        !          1308:   /* enter softfloat operation: */
        !          1309:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !          1310:   tme_ieee754_global_ctl = ieee754_ctl;
        !          1311:   tme_ieee754_global_exceptions = 0;
        !          1312:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !          1313: 
        !          1314:   /* assume that this operation raises no exceptions: */
        !          1315:   exceptions = 0;
        !          1316: 
        !          1317:   /* the operation: */
        !          1318:   _tme_ieee754_extended80_value_set(dst, floatx80,
        !          1319:     floatx80_add((*((const floatx80 *) tme_ieee754_extended80_value_get(src0, &src0_buffer))),
        !          1320:                 int32_to_floatx80(0)));
        !          1321: 
        !          1322:   /* leave softfloat operation: */
        !          1323:   tme_ieee754_global_ctl = NULL;
        !          1324:   exceptions |= tme_ieee754_global_exceptions;
        !          1325:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !          1326:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          1327: 
        !          1328:   /* signal any exceptions: */
        !          1329:   if (exceptions != 0) {
        !          1330:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          1331:   }
        !          1332: }
        !          1333: 
        !          1334: #endif /* defined(TME_HAVE_INT64_T) */
        !          1335: 
        !          1336: #if defined(TME_HAVE_INT64_T)
        !          1337: 
        !          1338: /* this does a strict compliance extended80-precision rint: */
        !          1339: static void
        !          1340: _tme_ieee754_strict_extended80_rint(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          1341: {
        !          1342:   struct tme_float_ieee754_extended80 src0_buffer;
        !          1343:   int exceptions;
        !          1344: 
        !          1345:   /* enter softfloat operation: */
        !          1346:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !          1347:   tme_ieee754_global_ctl = ieee754_ctl;
        !          1348:   tme_ieee754_global_exceptions = 0;
        !          1349:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !          1350: 
        !          1351:   /* assume that this operation raises no exceptions: */
        !          1352:   exceptions = 0;
        !          1353: 
        !          1354:   /* the operation: */
        !          1355:   _tme_ieee754_extended80_value_set(dst, floatx80,
        !          1356:     floatx80_round_to_int((*((const floatx80 *) tme_ieee754_extended80_value_get(src0, &src0_buffer)))));
        !          1357: 
        !          1358:   /* leave softfloat operation: */
        !          1359:   tme_ieee754_global_ctl = NULL;
        !          1360:   exceptions |= tme_ieee754_global_exceptions;
        !          1361:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !          1362:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          1363: 
        !          1364:   /* signal any exceptions: */
        !          1365:   if (exceptions != 0) {
        !          1366:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          1367:   }
        !          1368: }
        !          1369: 
        !          1370: #endif /* defined(TME_HAVE_INT64_T) */
        !          1371: 
        !          1372: /* this does a strict compliance extended80-precision getexp: */
        !          1373: static void
        !          1374: _tme_ieee754_strict_extended80_getexp(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          1375: {
        !          1376:   struct tme_float_ieee754_extended80 src0_buffer;
        !          1377:   int exceptions;
        !          1378: 
        !          1379:   /* check for a NaN operand: */
        !          1380:   if (__tme_predict_false(tme_ieee754_extended80_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          1381:     return;
        !          1382:   }
        !          1383: 
        !          1384:   /* if the operand is an infinity: */
        !          1385:   if (tme_ieee754_extended80_is_inf(src0)) {
        !          1386: 
        !          1387:     /* return a NaN: */
        !          1388:     dst->tme_float_format = TME_FLOAT_FORMAT_IEEE754_EXTENDED80;
        !          1389:     dst->tme_float_value_ieee754_extended80 = ieee754_ctl->tme_ieee754_ctl_default_nan_extended80;
        !          1390:     return;
        !          1391:   }
        !          1392: 
        !          1393:   /* assume that this operation raises no exceptions: */
        !          1394:   exceptions = 0;
        !          1395: 
        !          1396:   /* the operation: */
        !          1397: 
        !          1398:   /* if the operand is a zero, return a zero: */
        !          1399:   if (tme_ieee754_extended80_is_zero(src0)) {
        !          1400:     tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN, 0);
        !          1401:   }
        !          1402: 
        !          1403:   /* otherwise, return the unbiased exponent: */
        !          1404:   else {
        !          1405:     tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN, TME_FIELD_MASK_EXTRACTU((*tme_ieee754_extended80_value_get(src0, &src0_buffer)).tme_float_ieee754_extended80_sexp, ((tme_uint32_t) 0x7fff)) - ((((tme_uint32_t) 0x7fff) / _TME_FIELD_MASK_FACTOR(((tme_uint32_t) 0x7fff))) >> 1));
        !          1406:   }
        !          1407:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          1408: 
        !          1409:   /* signal any exceptions: */
        !          1410:   if (exceptions != 0) {
        !          1411:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          1412:   }
        !          1413: }
        !          1414: 
        !          1415: /* this does a strict compliance extended80-precision getman: */
        !          1416: static void
        !          1417: _tme_ieee754_strict_extended80_getman(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          1418: {
        !          1419:   struct tme_float_ieee754_extended80 src0_buffer;
        !          1420:   int exceptions;
        !          1421: 
        !          1422:   /* check for a NaN operand: */
        !          1423:   if (__tme_predict_false(tme_ieee754_extended80_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          1424:     return;
        !          1425:   }
        !          1426: 
        !          1427:   /* if the operand is an infinity: */
        !          1428:   if (tme_ieee754_extended80_is_inf(src0)) {
        !          1429: 
        !          1430:     /* return a NaN: */
        !          1431:     dst->tme_float_format = TME_FLOAT_FORMAT_IEEE754_EXTENDED80;
        !          1432:     dst->tme_float_value_ieee754_extended80 = ieee754_ctl->tme_ieee754_ctl_default_nan_extended80;
        !          1433:     return;
        !          1434:   }
        !          1435: 
        !          1436:   /* assume that this operation raises no exceptions: */
        !          1437:   exceptions = 0;
        !          1438: 
        !          1439:   /* the operation: */
        !          1440: 
        !          1441:   /* if the operand is a zero, return it: */
        !          1442:   if (tme_ieee754_extended80_is_zero(src0)) {
        !          1443:     *dst = *src0;
        !          1444:   }
        !          1445: 
        !          1446:   /* otherwise, return the operand, with its exponent set to biased zero: */
        !          1447:   else {
        !          1448:     tme_ieee754_extended80_value_set(dst, (*tme_ieee754_extended80_value_get(src0, &src0_buffer)));
        !          1449:     TME_FIELD_MASK_DEPOSITU(dst->tme_float_value_ieee754_extended80.tme_float_ieee754_extended80_sexp, ((tme_uint32_t) 0x7fff), ((((tme_uint32_t) 0x7fff) / _TME_FIELD_MASK_FACTOR(((tme_uint32_t) 0x7fff))) >> 1));
        !          1450:   }
        !          1451:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          1452: 
        !          1453:   /* signal any exceptions: */
        !          1454:   if (exceptions != 0) {
        !          1455:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          1456:   }
        !          1457: }
        !          1458: 
        !          1459: #if defined(TME_HAVE_INT64_T)
        !          1460: 
        !          1461: /* this does a strict compliance extended80-precision from-single: */
        !          1462: static void
        !          1463: _tme_ieee754_strict_extended80_from_single(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          1464: {
        !          1465:   tme_uint32_t src0_buffer;
        !          1466:   int exceptions;
        !          1467: 
        !          1468:   /* enter softfloat operation: */
        !          1469:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !          1470:   tme_ieee754_global_ctl = ieee754_ctl;
        !          1471:   tme_ieee754_global_exceptions = 0;
        !          1472:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !          1473: 
        !          1474:   /* assume that this operation raises no exceptions: */
        !          1475:   exceptions = 0;
        !          1476: 
        !          1477:   /* the operation: */
        !          1478:   _tme_ieee754_extended80_value_set(dst, floatx80,
        !          1479:     float32_to_floatx80((*((const float32 *) tme_ieee754_single_value_get(src0, &src0_buffer)))));
        !          1480: 
        !          1481:   /* leave softfloat operation: */
        !          1482:   tme_ieee754_global_ctl = NULL;
        !          1483:   exceptions |= tme_ieee754_global_exceptions;
        !          1484:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !          1485:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          1486: 
        !          1487:   /* signal any exceptions: */
        !          1488:   if (exceptions != 0) {
        !          1489:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          1490:   }
        !          1491: }
        !          1492: 
        !          1493: #endif /* defined(TME_HAVE_INT64_T) */
        !          1494: 
        !          1495: #if defined(TME_HAVE_INT64_T)
        !          1496: 
        !          1497: /* this does a strict compliance extended80-precision from-double: */
        !          1498: static void
        !          1499: _tme_ieee754_strict_extended80_from_double(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          1500: {
        !          1501:   union tme_value64 src0_buffer;
        !          1502:   int exceptions;
        !          1503: 
        !          1504:   /* enter softfloat operation: */
        !          1505:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !          1506:   tme_ieee754_global_ctl = ieee754_ctl;
        !          1507:   tme_ieee754_global_exceptions = 0;
        !          1508:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !          1509: 
        !          1510:   /* assume that this operation raises no exceptions: */
        !          1511:   exceptions = 0;
        !          1512: 
        !          1513:   /* the operation: */
        !          1514:   _tme_ieee754_extended80_value_set(dst, floatx80,
        !          1515:     float64_to_floatx80((*((const float64 *) tme_ieee754_double_value_get(src0, &src0_buffer)))));
        !          1516: 
        !          1517:   /* leave softfloat operation: */
        !          1518:   tme_ieee754_global_ctl = NULL;
        !          1519:   exceptions |= tme_ieee754_global_exceptions;
        !          1520:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !          1521:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          1522: 
        !          1523:   /* signal any exceptions: */
        !          1524:   if (exceptions != 0) {
        !          1525:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          1526:   }
        !          1527: }
        !          1528: 
        !          1529: #endif /* defined(TME_HAVE_INT64_T) */
        !          1530: 
        !          1531: #if defined(TME_HAVE_INT64_T)
        !          1532: 
        !          1533: /* this does a strict compliance extended80-precision from-quad: */
        !          1534: static void
        !          1535: _tme_ieee754_strict_extended80_from_quad(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          1536: {
        !          1537:   struct tme_float_ieee754_quad src0_buffer;
        !          1538:   int exceptions;
        !          1539: 
        !          1540:   /* enter softfloat operation: */
        !          1541:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !          1542:   tme_ieee754_global_ctl = ieee754_ctl;
        !          1543:   tme_ieee754_global_exceptions = 0;
        !          1544:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !          1545: 
        !          1546:   /* assume that this operation raises no exceptions: */
        !          1547:   exceptions = 0;
        !          1548: 
        !          1549:   /* the operation: */
        !          1550:   _tme_ieee754_extended80_value_set(dst, floatx80,
        !          1551:     float128_to_floatx80((*((const float128 *) tme_ieee754_quad_value_get(src0, &src0_buffer)))));
        !          1552: 
        !          1553:   /* leave softfloat operation: */
        !          1554:   tme_ieee754_global_ctl = NULL;
        !          1555:   exceptions |= tme_ieee754_global_exceptions;
        !          1556:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !          1557:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          1558: 
        !          1559:   /* signal any exceptions: */
        !          1560:   if (exceptions != 0) {
        !          1561:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          1562:   }
        !          1563: }
        !          1564: 
        !          1565: #endif /* defined(TME_HAVE_INT64_T) */
        !          1566: 
        !          1567: /* this does a strict compliance extended80-precision to-int32: */
        !          1568: static void
        !          1569: _tme_ieee754_strict_extended80_to_int32(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, tme_int32_t *dst)
        !          1570: {
        !          1571:   struct tme_float_ieee754_extended80 src0_buffer;
        !          1572:   int exceptions;
        !          1573: 
        !          1574:   /* enter softfloat operation: */
        !          1575:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !          1576:   tme_ieee754_global_ctl = ieee754_ctl;
        !          1577:   tme_ieee754_global_exceptions = 0;
        !          1578:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !          1579: 
        !          1580:   /* assume that this operation raises no exceptions: */
        !          1581:   exceptions = 0;
        !          1582: 
        !          1583:   /* the operation: */
        !          1584:   *dst = floatx80_to_int32((*((const floatx80 *) tme_ieee754_extended80_value_get(src0, &src0_buffer))));
        !          1585: 
        !          1586:   /* leave softfloat operation: */
        !          1587:   tme_ieee754_global_ctl = NULL;
        !          1588:   exceptions |= tme_ieee754_global_exceptions;
        !          1589:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !          1590:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          1591: 
        !          1592:   /* signal any exceptions: */
        !          1593:   if (exceptions != 0) {
        !          1594:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          1595:   }
        !          1596: }
        !          1597: 
        !          1598: #if defined(TME_HAVE_INT64_T)
        !          1599: 
        !          1600: /* this does a strict compliance quad-precision add: */
        !          1601: static void
        !          1602: _tme_ieee754_strict_quad_add(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          1603: {
        !          1604:   struct tme_float_ieee754_quad src0_buffer;
        !          1605:   struct tme_float_ieee754_quad src1_buffer;
        !          1606:   int exceptions;
        !          1607: 
        !          1608:   /* enter softfloat operation: */
        !          1609:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !          1610:   tme_ieee754_global_ctl = ieee754_ctl;
        !          1611:   tme_ieee754_global_exceptions = 0;
        !          1612:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !          1613: 
        !          1614:   /* assume that this operation raises no exceptions: */
        !          1615:   exceptions = 0;
        !          1616: 
        !          1617:   /* the operation: */
        !          1618:   _tme_ieee754_quad_value_set(dst, float128,
        !          1619:     float128_add((*((const float128 *) tme_ieee754_quad_value_get(src0, &src0_buffer))),
        !          1620:                 (*((const float128 *) tme_ieee754_quad_value_get(src1, &src1_buffer)))));
        !          1621: 
        !          1622:   /* leave softfloat operation: */
        !          1623:   tme_ieee754_global_ctl = NULL;
        !          1624:   exceptions |= tme_ieee754_global_exceptions;
        !          1625:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !          1626:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          1627: 
        !          1628:   /* signal any exceptions: */
        !          1629:   if (exceptions != 0) {
        !          1630:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          1631:   }
        !          1632: }
        !          1633: 
        !          1634: #endif /* defined(TME_HAVE_INT64_T) */
        !          1635: 
        !          1636: #if defined(TME_HAVE_INT64_T)
        !          1637: 
        !          1638: /* this does a strict compliance quad-precision sub: */
        !          1639: static void
        !          1640: _tme_ieee754_strict_quad_sub(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          1641: {
        !          1642:   struct tme_float_ieee754_quad src0_buffer;
        !          1643:   struct tme_float_ieee754_quad src1_buffer;
        !          1644:   int exceptions;
        !          1645: 
        !          1646:   /* enter softfloat operation: */
        !          1647:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !          1648:   tme_ieee754_global_ctl = ieee754_ctl;
        !          1649:   tme_ieee754_global_exceptions = 0;
        !          1650:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !          1651: 
        !          1652:   /* assume that this operation raises no exceptions: */
        !          1653:   exceptions = 0;
        !          1654: 
        !          1655:   /* the operation: */
        !          1656:   _tme_ieee754_quad_value_set(dst, float128,
        !          1657:     float128_sub((*((const float128 *) tme_ieee754_quad_value_get(src0, &src0_buffer))),
        !          1658:                 (*((const float128 *) tme_ieee754_quad_value_get(src1, &src1_buffer)))));
        !          1659: 
        !          1660:   /* leave softfloat operation: */
        !          1661:   tme_ieee754_global_ctl = NULL;
        !          1662:   exceptions |= tme_ieee754_global_exceptions;
        !          1663:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !          1664:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          1665: 
        !          1666:   /* signal any exceptions: */
        !          1667:   if (exceptions != 0) {
        !          1668:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          1669:   }
        !          1670: }
        !          1671: 
        !          1672: #endif /* defined(TME_HAVE_INT64_T) */
        !          1673: 
        !          1674: #if defined(TME_HAVE_INT64_T)
        !          1675: 
        !          1676: /* this does a strict compliance quad-precision mul: */
        !          1677: static void
        !          1678: _tme_ieee754_strict_quad_mul(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          1679: {
        !          1680:   struct tme_float_ieee754_quad src0_buffer;
        !          1681:   struct tme_float_ieee754_quad src1_buffer;
        !          1682:   int exceptions;
        !          1683: 
        !          1684:   /* enter softfloat operation: */
        !          1685:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !          1686:   tme_ieee754_global_ctl = ieee754_ctl;
        !          1687:   tme_ieee754_global_exceptions = 0;
        !          1688:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !          1689: 
        !          1690:   /* assume that this operation raises no exceptions: */
        !          1691:   exceptions = 0;
        !          1692: 
        !          1693:   /* the operation: */
        !          1694:   _tme_ieee754_quad_value_set(dst, float128,
        !          1695:     float128_mul((*((const float128 *) tme_ieee754_quad_value_get(src0, &src0_buffer))),
        !          1696:                 (*((const float128 *) tme_ieee754_quad_value_get(src1, &src1_buffer)))));
        !          1697: 
        !          1698:   /* leave softfloat operation: */
        !          1699:   tme_ieee754_global_ctl = NULL;
        !          1700:   exceptions |= tme_ieee754_global_exceptions;
        !          1701:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !          1702:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          1703: 
        !          1704:   /* signal any exceptions: */
        !          1705:   if (exceptions != 0) {
        !          1706:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          1707:   }
        !          1708: }
        !          1709: 
        !          1710: #endif /* defined(TME_HAVE_INT64_T) */
        !          1711: 
        !          1712: #if defined(TME_HAVE_INT64_T)
        !          1713: 
        !          1714: /* this does a strict compliance quad-precision div: */
        !          1715: static void
        !          1716: _tme_ieee754_strict_quad_div(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          1717: {
        !          1718:   struct tme_float_ieee754_quad src0_buffer;
        !          1719:   struct tme_float_ieee754_quad src1_buffer;
        !          1720:   int exceptions;
        !          1721: 
        !          1722:   /* enter softfloat operation: */
        !          1723:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !          1724:   tme_ieee754_global_ctl = ieee754_ctl;
        !          1725:   tme_ieee754_global_exceptions = 0;
        !          1726:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !          1727: 
        !          1728:   /* assume that this operation raises no exceptions: */
        !          1729:   exceptions = 0;
        !          1730: 
        !          1731:   /* the operation: */
        !          1732:   _tme_ieee754_quad_value_set(dst, float128,
        !          1733:     float128_div((*((const float128 *) tme_ieee754_quad_value_get(src0, &src0_buffer))),
        !          1734:                 (*((const float128 *) tme_ieee754_quad_value_get(src1, &src1_buffer)))));
        !          1735: 
        !          1736:   /* leave softfloat operation: */
        !          1737:   tme_ieee754_global_ctl = NULL;
        !          1738:   exceptions |= tme_ieee754_global_exceptions;
        !          1739:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !          1740:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          1741: 
        !          1742:   /* signal any exceptions: */
        !          1743:   if (exceptions != 0) {
        !          1744:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          1745:   }
        !          1746: }
        !          1747: 
        !          1748: #endif /* defined(TME_HAVE_INT64_T) */
        !          1749: 
        !          1750: #if defined(TME_HAVE_INT64_T)
        !          1751: 
        !          1752: /* this does a strict compliance quad-precision rem: */
        !          1753: static void
        !          1754: _tme_ieee754_strict_quad_rem(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          1755: {
        !          1756:   struct tme_float_ieee754_quad src0_buffer;
        !          1757:   struct tme_float_ieee754_quad src1_buffer;
        !          1758:   int exceptions;
        !          1759: 
        !          1760:   /* enter softfloat operation: */
        !          1761:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !          1762:   tme_ieee754_global_ctl = ieee754_ctl;
        !          1763:   tme_ieee754_global_exceptions = 0;
        !          1764:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !          1765: 
        !          1766:   /* assume that this operation raises no exceptions: */
        !          1767:   exceptions = 0;
        !          1768: 
        !          1769:   /* the operation: */
        !          1770:   _tme_ieee754_quad_value_set(dst, float128,
        !          1771:     float128_rem((*((const float128 *) tme_ieee754_quad_value_get(src0, &src0_buffer))),
        !          1772:                 (*((const float128 *) tme_ieee754_quad_value_get(src1, &src1_buffer)))));
        !          1773: 
        !          1774:   /* leave softfloat operation: */
        !          1775:   tme_ieee754_global_ctl = NULL;
        !          1776:   exceptions |= tme_ieee754_global_exceptions;
        !          1777:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !          1778:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          1779: 
        !          1780:   /* signal any exceptions: */
        !          1781:   if (exceptions != 0) {
        !          1782:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          1783:   }
        !          1784: }
        !          1785: 
        !          1786: #endif /* defined(TME_HAVE_INT64_T) */
        !          1787: 
        !          1788: #if defined(TME_HAVE_INT64_T)
        !          1789: 
        !          1790: /* this does a strict compliance quad-precision sqrt: */
        !          1791: static void
        !          1792: _tme_ieee754_strict_quad_sqrt(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          1793: {
        !          1794:   struct tme_float_ieee754_quad src0_buffer;
        !          1795:   int exceptions;
        !          1796: 
        !          1797:   /* enter softfloat operation: */
        !          1798:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !          1799:   tme_ieee754_global_ctl = ieee754_ctl;
        !          1800:   tme_ieee754_global_exceptions = 0;
        !          1801:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !          1802: 
        !          1803:   /* assume that this operation raises no exceptions: */
        !          1804:   exceptions = 0;
        !          1805: 
        !          1806:   /* the operation: */
        !          1807:   _tme_ieee754_quad_value_set(dst, float128,
        !          1808:     float128_sqrt((*((const float128 *) tme_ieee754_quad_value_get(src0, &src0_buffer)))));
        !          1809: 
        !          1810:   /* leave softfloat operation: */
        !          1811:   tme_ieee754_global_ctl = NULL;
        !          1812:   exceptions |= tme_ieee754_global_exceptions;
        !          1813:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !          1814:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          1815: 
        !          1816:   /* signal any exceptions: */
        !          1817:   if (exceptions != 0) {
        !          1818:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          1819:   }
        !          1820: }
        !          1821: 
        !          1822: #endif /* defined(TME_HAVE_INT64_T) */
        !          1823: 
        !          1824: #if defined(TME_HAVE_INT64_T)
        !          1825: 
        !          1826: /* this does a strict compliance quad-precision neg: */
        !          1827: static void
        !          1828: _tme_ieee754_strict_quad_neg(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          1829: {
        !          1830:   struct tme_float_ieee754_quad src0_buffer;
        !          1831:   int exceptions;
        !          1832: 
        !          1833:   /* enter softfloat operation: */
        !          1834:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !          1835:   tme_ieee754_global_ctl = ieee754_ctl;
        !          1836:   tme_ieee754_global_exceptions = 0;
        !          1837:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !          1838: 
        !          1839:   /* assume that this operation raises no exceptions: */
        !          1840:   exceptions = 0;
        !          1841: 
        !          1842:   /* the operation: */
        !          1843:   _tme_ieee754_quad_value_set(dst, float128,
        !          1844:     float128_sub(int32_to_float128(0),
        !          1845:                 (*((const float128 *) tme_ieee754_quad_value_get(src0, &src0_buffer)))));
        !          1846: 
        !          1847:   /* leave softfloat operation: */
        !          1848:   tme_ieee754_global_ctl = NULL;
        !          1849:   exceptions |= tme_ieee754_global_exceptions;
        !          1850:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !          1851:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          1852: 
        !          1853:   /* signal any exceptions: */
        !          1854:   if (exceptions != 0) {
        !          1855:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          1856:   }
        !          1857: }
        !          1858: 
        !          1859: #endif /* defined(TME_HAVE_INT64_T) */
        !          1860: 
        !          1861: #if defined(TME_HAVE_INT64_T)
        !          1862: 
        !          1863: /* this does a strict compliance quad-precision move: */
        !          1864: static void
        !          1865: _tme_ieee754_strict_quad_move(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          1866: {
        !          1867:   struct tme_float_ieee754_quad src0_buffer;
        !          1868:   int exceptions;
        !          1869: 
        !          1870:   /* enter softfloat operation: */
        !          1871:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !          1872:   tme_ieee754_global_ctl = ieee754_ctl;
        !          1873:   tme_ieee754_global_exceptions = 0;
        !          1874:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !          1875: 
        !          1876:   /* assume that this operation raises no exceptions: */
        !          1877:   exceptions = 0;
        !          1878: 
        !          1879:   /* the operation: */
        !          1880:   _tme_ieee754_quad_value_set(dst, float128,
        !          1881:     float128_add((*((const float128 *) tme_ieee754_quad_value_get(src0, &src0_buffer))),
        !          1882:                 int32_to_float128(0)));
        !          1883: 
        !          1884:   /* leave softfloat operation: */
        !          1885:   tme_ieee754_global_ctl = NULL;
        !          1886:   exceptions |= tme_ieee754_global_exceptions;
        !          1887:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !          1888:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          1889: 
        !          1890:   /* signal any exceptions: */
        !          1891:   if (exceptions != 0) {
        !          1892:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          1893:   }
        !          1894: }
        !          1895: 
        !          1896: #endif /* defined(TME_HAVE_INT64_T) */
        !          1897: 
        !          1898: #if defined(TME_HAVE_INT64_T)
        !          1899: 
        !          1900: /* this does a strict compliance quad-precision rint: */
        !          1901: static void
        !          1902: _tme_ieee754_strict_quad_rint(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          1903: {
        !          1904:   struct tme_float_ieee754_quad src0_buffer;
        !          1905:   int exceptions;
        !          1906: 
        !          1907:   /* enter softfloat operation: */
        !          1908:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !          1909:   tme_ieee754_global_ctl = ieee754_ctl;
        !          1910:   tme_ieee754_global_exceptions = 0;
        !          1911:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !          1912: 
        !          1913:   /* assume that this operation raises no exceptions: */
        !          1914:   exceptions = 0;
        !          1915: 
        !          1916:   /* the operation: */
        !          1917:   _tme_ieee754_quad_value_set(dst, float128,
        !          1918:     float128_round_to_int((*((const float128 *) tme_ieee754_quad_value_get(src0, &src0_buffer)))));
        !          1919: 
        !          1920:   /* leave softfloat operation: */
        !          1921:   tme_ieee754_global_ctl = NULL;
        !          1922:   exceptions |= tme_ieee754_global_exceptions;
        !          1923:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !          1924:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          1925: 
        !          1926:   /* signal any exceptions: */
        !          1927:   if (exceptions != 0) {
        !          1928:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          1929:   }
        !          1930: }
        !          1931: 
        !          1932: #endif /* defined(TME_HAVE_INT64_T) */
        !          1933: 
        !          1934: /* this does a strict compliance quad-precision getexp: */
        !          1935: static void
        !          1936: _tme_ieee754_strict_quad_getexp(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          1937: {
        !          1938:   struct tme_float_ieee754_quad src0_buffer;
        !          1939:   int exceptions;
        !          1940: 
        !          1941:   /* check for a NaN operand: */
        !          1942:   if (__tme_predict_false(tme_ieee754_quad_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          1943:     return;
        !          1944:   }
        !          1945: 
        !          1946:   /* if the operand is an infinity: */
        !          1947:   if (tme_ieee754_quad_is_inf(src0)) {
        !          1948: 
        !          1949:     /* return a NaN: */
        !          1950:     dst->tme_float_format = TME_FLOAT_FORMAT_IEEE754_QUAD;
        !          1951:     dst->tme_float_value_ieee754_quad = ieee754_ctl->tme_ieee754_ctl_default_nan_quad;
        !          1952:     return;
        !          1953:   }
        !          1954: 
        !          1955:   /* assume that this operation raises no exceptions: */
        !          1956:   exceptions = 0;
        !          1957: 
        !          1958:   /* the operation: */
        !          1959: 
        !          1960:   /* if the operand is a zero, return a zero: */
        !          1961:   if (tme_ieee754_quad_is_zero(src0)) {
        !          1962:     tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN, 0);
        !          1963:   }
        !          1964: 
        !          1965:   /* otherwise, return the unbiased exponent: */
        !          1966:   else {
        !          1967:     tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN, TME_FIELD_MASK_EXTRACTU((*tme_ieee754_quad_value_get(src0, &src0_buffer)).tme_float_ieee754_quad_hi.tme_value64_uint32_hi, ((tme_uint32_t) 0x7fff0000)) - ((((tme_uint32_t) 0x7fff0000) / _TME_FIELD_MASK_FACTOR(((tme_uint32_t) 0x7fff0000))) >> 1));
        !          1968:   }
        !          1969:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          1970: 
        !          1971:   /* signal any exceptions: */
        !          1972:   if (exceptions != 0) {
        !          1973:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          1974:   }
        !          1975: }
        !          1976: 
        !          1977: /* this does a strict compliance quad-precision getman: */
        !          1978: static void
        !          1979: _tme_ieee754_strict_quad_getman(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          1980: {
        !          1981:   struct tme_float_ieee754_quad src0_buffer;
        !          1982:   int exceptions;
        !          1983: 
        !          1984:   /* check for a NaN operand: */
        !          1985:   if (__tme_predict_false(tme_ieee754_quad_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          1986:     return;
        !          1987:   }
        !          1988: 
        !          1989:   /* if the operand is an infinity: */
        !          1990:   if (tme_ieee754_quad_is_inf(src0)) {
        !          1991: 
        !          1992:     /* return a NaN: */
        !          1993:     dst->tme_float_format = TME_FLOAT_FORMAT_IEEE754_QUAD;
        !          1994:     dst->tme_float_value_ieee754_quad = ieee754_ctl->tme_ieee754_ctl_default_nan_quad;
        !          1995:     return;
        !          1996:   }
        !          1997: 
        !          1998:   /* assume that this operation raises no exceptions: */
        !          1999:   exceptions = 0;
        !          2000: 
        !          2001:   /* the operation: */
        !          2002: 
        !          2003:   /* if the operand is a zero, return it: */
        !          2004:   if (tme_ieee754_quad_is_zero(src0)) {
        !          2005:     *dst = *src0;
        !          2006:   }
        !          2007: 
        !          2008:   /* otherwise, return the operand, with its exponent set to biased zero: */
        !          2009:   else {
        !          2010:     tme_ieee754_quad_value_set(dst, (*tme_ieee754_quad_value_get(src0, &src0_buffer)));
        !          2011:     TME_FIELD_MASK_DEPOSITU(dst->tme_float_value_ieee754_quad.tme_float_ieee754_quad_hi.tme_value64_uint32_hi, ((tme_uint32_t) 0x7fff0000), ((((tme_uint32_t) 0x7fff0000) / _TME_FIELD_MASK_FACTOR(((tme_uint32_t) 0x7fff0000))) >> 1));
        !          2012:   }
        !          2013:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          2014: 
        !          2015:   /* signal any exceptions: */
        !          2016:   if (exceptions != 0) {
        !          2017:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          2018:   }
        !          2019: }
        !          2020: 
        !          2021: #if defined(TME_HAVE_INT64_T)
        !          2022: 
        !          2023: /* this does a strict compliance quad-precision from-single: */
        !          2024: static void
        !          2025: _tme_ieee754_strict_quad_from_single(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          2026: {
        !          2027:   tme_uint32_t src0_buffer;
        !          2028:   int exceptions;
        !          2029: 
        !          2030:   /* enter softfloat operation: */
        !          2031:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !          2032:   tme_ieee754_global_ctl = ieee754_ctl;
        !          2033:   tme_ieee754_global_exceptions = 0;
        !          2034:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !          2035: 
        !          2036:   /* assume that this operation raises no exceptions: */
        !          2037:   exceptions = 0;
        !          2038: 
        !          2039:   /* the operation: */
        !          2040:   _tme_ieee754_quad_value_set(dst, float128,
        !          2041:     float32_to_float128((*((const float32 *) tme_ieee754_single_value_get(src0, &src0_buffer)))));
        !          2042: 
        !          2043:   /* leave softfloat operation: */
        !          2044:   tme_ieee754_global_ctl = NULL;
        !          2045:   exceptions |= tme_ieee754_global_exceptions;
        !          2046:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !          2047:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          2048: 
        !          2049:   /* signal any exceptions: */
        !          2050:   if (exceptions != 0) {
        !          2051:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          2052:   }
        !          2053: }
        !          2054: 
        !          2055: #endif /* defined(TME_HAVE_INT64_T) */
        !          2056: 
        !          2057: #if defined(TME_HAVE_INT64_T)
        !          2058: 
        !          2059: /* this does a strict compliance quad-precision from-double: */
        !          2060: static void
        !          2061: _tme_ieee754_strict_quad_from_double(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          2062: {
        !          2063:   union tme_value64 src0_buffer;
        !          2064:   int exceptions;
        !          2065: 
        !          2066:   /* enter softfloat operation: */
        !          2067:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !          2068:   tme_ieee754_global_ctl = ieee754_ctl;
        !          2069:   tme_ieee754_global_exceptions = 0;
        !          2070:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !          2071: 
        !          2072:   /* assume that this operation raises no exceptions: */
        !          2073:   exceptions = 0;
        !          2074: 
        !          2075:   /* the operation: */
        !          2076:   _tme_ieee754_quad_value_set(dst, float128,
        !          2077:     float64_to_float128((*((const float64 *) tme_ieee754_double_value_get(src0, &src0_buffer)))));
        !          2078: 
        !          2079:   /* leave softfloat operation: */
        !          2080:   tme_ieee754_global_ctl = NULL;
        !          2081:   exceptions |= tme_ieee754_global_exceptions;
        !          2082:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !          2083:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          2084: 
        !          2085:   /* signal any exceptions: */
        !          2086:   if (exceptions != 0) {
        !          2087:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          2088:   }
        !          2089: }
        !          2090: 
        !          2091: #endif /* defined(TME_HAVE_INT64_T) */
        !          2092: 
        !          2093: #if defined(TME_HAVE_INT64_T)
        !          2094: 
        !          2095: /* this does a strict compliance quad-precision from-extended80: */
        !          2096: static void
        !          2097: _tme_ieee754_strict_quad_from_extended80(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          2098: {
        !          2099:   struct tme_float_ieee754_extended80 src0_buffer;
        !          2100:   int exceptions;
        !          2101: 
        !          2102:   /* enter softfloat operation: */
        !          2103:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !          2104:   tme_ieee754_global_ctl = ieee754_ctl;
        !          2105:   tme_ieee754_global_exceptions = 0;
        !          2106:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !          2107: 
        !          2108:   /* assume that this operation raises no exceptions: */
        !          2109:   exceptions = 0;
        !          2110: 
        !          2111:   /* the operation: */
        !          2112:   _tme_ieee754_quad_value_set(dst, float128,
        !          2113:     floatx80_to_float128((*((const floatx80 *) tme_ieee754_extended80_value_get(src0, &src0_buffer)))));
        !          2114: 
        !          2115:   /* leave softfloat operation: */
        !          2116:   tme_ieee754_global_ctl = NULL;
        !          2117:   exceptions |= tme_ieee754_global_exceptions;
        !          2118:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !          2119:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          2120: 
        !          2121:   /* signal any exceptions: */
        !          2122:   if (exceptions != 0) {
        !          2123:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          2124:   }
        !          2125: }
        !          2126: 
        !          2127: #endif /* defined(TME_HAVE_INT64_T) */
        !          2128: 
        !          2129: /* this does a strict compliance quad-precision to-int32: */
        !          2130: static void
        !          2131: _tme_ieee754_strict_quad_to_int32(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, tme_int32_t *dst)
        !          2132: {
        !          2133:   struct tme_float_ieee754_quad src0_buffer;
        !          2134:   int exceptions;
        !          2135: 
        !          2136:   /* enter softfloat operation: */
        !          2137:   tme_mutex_lock(&tme_ieee754_global_mutex);
        !          2138:   tme_ieee754_global_ctl = ieee754_ctl;
        !          2139:   tme_ieee754_global_exceptions = 0;
        !          2140:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_ieee754_unlock_softfloat;
        !          2141: 
        !          2142:   /* assume that this operation raises no exceptions: */
        !          2143:   exceptions = 0;
        !          2144: 
        !          2145:   /* the operation: */
        !          2146:   *dst = float128_to_int32((*((const float128 *) tme_ieee754_quad_value_get(src0, &src0_buffer))));
        !          2147: 
        !          2148:   /* leave softfloat operation: */
        !          2149:   tme_ieee754_global_ctl = NULL;
        !          2150:   exceptions |= tme_ieee754_global_exceptions;
        !          2151:   tme_mutex_unlock(&tme_ieee754_global_mutex);
        !          2152:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          2153: 
        !          2154:   /* signal any exceptions: */
        !          2155:   if (exceptions != 0) {
        !          2156:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          2157:   }
        !          2158: }
        !          2159: 
        !          2160: /* the strict compliance operations: */
        !          2161: _tme_const struct tme_ieee754_ops tme_ieee754_ops_strict = {
        !          2162: 
        !          2163:   /* the version of this structure: */
        !          2164:   TME_X_VERSION(0, 0),
        !          2165: 
        !          2166:   /* this does a strict compliance single-precision add: */
        !          2167:   _tme_ieee754_strict_single_add,
        !          2168: 
        !          2169:   /* this does a strict compliance single-precision sub: */
        !          2170:   _tme_ieee754_strict_single_sub,
        !          2171: 
        !          2172:   /* this does a strict compliance single-precision mul: */
        !          2173:   _tme_ieee754_strict_single_mul,
        !          2174: 
        !          2175:   /* this does a strict compliance single-precision div: */
        !          2176:   _tme_ieee754_strict_single_div,
        !          2177: 
        !          2178:   /* this does a strict compliance single-precision rem: */
        !          2179:   _tme_ieee754_strict_single_rem,
        !          2180: 
        !          2181:   /* this does a strict compliance single-precision sqrt: */
        !          2182:   _tme_ieee754_strict_single_sqrt,
        !          2183: 
        !          2184:   /* this does a strict compliance single-precision abs: */
        !          2185:   NULL,
        !          2186: 
        !          2187:   /* this does a strict compliance single-precision neg: */
        !          2188:   _tme_ieee754_strict_single_neg,
        !          2189: 
        !          2190:   /* this does a strict compliance single-precision move: */
        !          2191:   _tme_ieee754_strict_single_move,
        !          2192: 
        !          2193:   /* this does a strict compliance single-precision rint: */
        !          2194:   _tme_ieee754_strict_single_rint,
        !          2195: 
        !          2196:   /* this does a strict compliance single-precision cos: */
        !          2197:   NULL,
        !          2198: 
        !          2199:   /* this does a strict compliance single-precision acos: */
        !          2200:   NULL,
        !          2201: 
        !          2202:   /* this does a strict compliance single-precision cosh: */
        !          2203:   NULL,
        !          2204: 
        !          2205:   /* this does a strict compliance single-precision sin: */
        !          2206:   NULL,
        !          2207: 
        !          2208:   /* this does a strict compliance single-precision asin: */
        !          2209:   NULL,
        !          2210: 
        !          2211:   /* this does a strict compliance single-precision sinh: */
        !          2212:   NULL,
        !          2213: 
        !          2214:   /* this does a strict compliance single-precision tan: */
        !          2215:   NULL,
        !          2216: 
        !          2217:   /* this does a strict compliance single-precision atan: */
        !          2218:   NULL,
        !          2219: 
        !          2220:   /* this does a strict compliance single-precision tanh: */
        !          2221:   NULL,
        !          2222: 
        !          2223:   /* this does a strict compliance single-precision atanh: */
        !          2224:   NULL,
        !          2225: 
        !          2226:   /* this does a strict compliance single-precision exp: */
        !          2227:   NULL,
        !          2228: 
        !          2229:   /* this does a strict compliance single-precision expm1: */
        !          2230:   NULL,
        !          2231: 
        !          2232:   /* this does a strict compliance single-precision log10: */
        !          2233:   NULL,
        !          2234: 
        !          2235:   /* this does a strict compliance single-precision log: */
        !          2236:   NULL,
        !          2237: 
        !          2238:   /* this does a strict compliance single-precision log1p: */
        !          2239:   NULL,
        !          2240: 
        !          2241:   /* this does a strict compliance single-precision getexp: */
        !          2242:   _tme_ieee754_strict_single_getexp,
        !          2243: 
        !          2244:   /* this does a strict compliance single-precision getman: */
        !          2245:   _tme_ieee754_strict_single_getman,
        !          2246: 
        !          2247:   /* this does a strict compliance single-precision scale: */
        !          2248:   NULL,
        !          2249: 
        !          2250:   /* this does a strict compliance single-precision pow: */
        !          2251:   NULL,
        !          2252: 
        !          2253:   /* this does a strict compliance single-precision from_double: */
        !          2254:   _tme_ieee754_strict_single_from_double,
        !          2255: 
        !          2256:   /* this does a strict compliance single-precision from_extended80: */
        !          2257:   _tme_ieee754_strict_single_from_extended80,
        !          2258: 
        !          2259:   /* this does a strict compliance single-precision from_quad: */
        !          2260:   _tme_ieee754_strict_single_from_quad,
        !          2261: 
        !          2262:   /* this does a strict compliance single-precision to_int32: */
        !          2263:   _tme_ieee754_strict_single_to_int32,
        !          2264: 
        !          2265:   /* this does a strict compliance single-precision to_int64: */
        !          2266:   NULL,
        !          2267: 
        !          2268:   /* this does a strict compliance double-precision add: */
        !          2269:   _tme_ieee754_strict_double_add,
        !          2270: 
        !          2271:   /* this does a strict compliance double-precision sub: */
        !          2272:   _tme_ieee754_strict_double_sub,
        !          2273: 
        !          2274:   /* this does a strict compliance double-precision mul: */
        !          2275:   _tme_ieee754_strict_double_mul,
        !          2276: 
        !          2277:   /* this does a strict compliance double-precision div: */
        !          2278:   _tme_ieee754_strict_double_div,
        !          2279: 
        !          2280:   /* this does a strict compliance double-precision rem: */
        !          2281:   _tme_ieee754_strict_double_rem,
        !          2282: 
        !          2283:   /* this does a strict compliance double-precision sqrt: */
        !          2284:   _tme_ieee754_strict_double_sqrt,
        !          2285: 
        !          2286:   /* this does a strict compliance double-precision abs: */
        !          2287:   NULL,
        !          2288: 
        !          2289:   /* this does a strict compliance double-precision neg: */
        !          2290:   _tme_ieee754_strict_double_neg,
        !          2291: 
        !          2292:   /* this does a strict compliance double-precision move: */
        !          2293:   _tme_ieee754_strict_double_move,
        !          2294: 
        !          2295:   /* this does a strict compliance double-precision rint: */
        !          2296:   _tme_ieee754_strict_double_rint,
        !          2297: 
        !          2298:   /* this does a strict compliance double-precision cos: */
        !          2299:   NULL,
        !          2300: 
        !          2301:   /* this does a strict compliance double-precision acos: */
        !          2302:   NULL,
        !          2303: 
        !          2304:   /* this does a strict compliance double-precision cosh: */
        !          2305:   NULL,
        !          2306: 
        !          2307:   /* this does a strict compliance double-precision sin: */
        !          2308:   NULL,
        !          2309: 
        !          2310:   /* this does a strict compliance double-precision asin: */
        !          2311:   NULL,
        !          2312: 
        !          2313:   /* this does a strict compliance double-precision sinh: */
        !          2314:   NULL,
        !          2315: 
        !          2316:   /* this does a strict compliance double-precision tan: */
        !          2317:   NULL,
        !          2318: 
        !          2319:   /* this does a strict compliance double-precision atan: */
        !          2320:   NULL,
        !          2321: 
        !          2322:   /* this does a strict compliance double-precision tanh: */
        !          2323:   NULL,
        !          2324: 
        !          2325:   /* this does a strict compliance double-precision atanh: */
        !          2326:   NULL,
        !          2327: 
        !          2328:   /* this does a strict compliance double-precision exp: */
        !          2329:   NULL,
        !          2330: 
        !          2331:   /* this does a strict compliance double-precision expm1: */
        !          2332:   NULL,
        !          2333: 
        !          2334:   /* this does a strict compliance double-precision log10: */
        !          2335:   NULL,
        !          2336: 
        !          2337:   /* this does a strict compliance double-precision log: */
        !          2338:   NULL,
        !          2339: 
        !          2340:   /* this does a strict compliance double-precision log1p: */
        !          2341:   NULL,
        !          2342: 
        !          2343:   /* this does a strict compliance double-precision getexp: */
        !          2344:   _tme_ieee754_strict_double_getexp,
        !          2345: 
        !          2346:   /* this does a strict compliance double-precision getman: */
        !          2347:   _tme_ieee754_strict_double_getman,
        !          2348: 
        !          2349:   /* this does a strict compliance double-precision scale: */
        !          2350:   NULL,
        !          2351: 
        !          2352:   /* this does a strict compliance double-precision pow: */
        !          2353:   NULL,
        !          2354: 
        !          2355:   /* this does a strict compliance double-precision from_single: */
        !          2356:   _tme_ieee754_strict_double_from_single,
        !          2357: 
        !          2358:   /* this does a strict compliance double-precision from_extended80: */
        !          2359:   _tme_ieee754_strict_double_from_extended80,
        !          2360: 
        !          2361:   /* this does a strict compliance double-precision from_quad: */
        !          2362:   _tme_ieee754_strict_double_from_quad,
        !          2363: 
        !          2364:   /* this does a strict compliance double-precision to_int32: */
        !          2365:   _tme_ieee754_strict_double_to_int32,
        !          2366: 
        !          2367:   /* this does a strict compliance double-precision to_int64: */
        !          2368:   NULL,
        !          2369: 
        !          2370:   /* this does a strict compliance extended80-precision add: */
        !          2371: #if (defined(TME_HAVE_INT64_T))
        !          2372:   _tme_ieee754_strict_extended80_add,
        !          2373: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          2374:   NULL,
        !          2375: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          2376: 
        !          2377:   /* this does a strict compliance extended80-precision sub: */
        !          2378: #if (defined(TME_HAVE_INT64_T))
        !          2379:   _tme_ieee754_strict_extended80_sub,
        !          2380: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          2381:   NULL,
        !          2382: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          2383: 
        !          2384:   /* this does a strict compliance extended80-precision mul: */
        !          2385: #if (defined(TME_HAVE_INT64_T))
        !          2386:   _tme_ieee754_strict_extended80_mul,
        !          2387: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          2388:   NULL,
        !          2389: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          2390: 
        !          2391:   /* this does a strict compliance extended80-precision div: */
        !          2392: #if (defined(TME_HAVE_INT64_T))
        !          2393:   _tme_ieee754_strict_extended80_div,
        !          2394: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          2395:   NULL,
        !          2396: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          2397: 
        !          2398:   /* this does a strict compliance extended80-precision rem: */
        !          2399: #if (defined(TME_HAVE_INT64_T))
        !          2400:   _tme_ieee754_strict_extended80_rem,
        !          2401: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          2402:   NULL,
        !          2403: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          2404: 
        !          2405:   /* this does a strict compliance extended80-precision sqrt: */
        !          2406: #if (defined(TME_HAVE_INT64_T))
        !          2407:   _tme_ieee754_strict_extended80_sqrt,
        !          2408: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          2409:   NULL,
        !          2410: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          2411: 
        !          2412:   /* this does a strict compliance extended80-precision abs: */
        !          2413:   NULL,
        !          2414: 
        !          2415:   /* this does a strict compliance extended80-precision neg: */
        !          2416: #if (defined(TME_HAVE_INT64_T))
        !          2417:   _tme_ieee754_strict_extended80_neg,
        !          2418: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          2419:   NULL,
        !          2420: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          2421: 
        !          2422:   /* this does a strict compliance extended80-precision move: */
        !          2423: #if (defined(TME_HAVE_INT64_T))
        !          2424:   _tme_ieee754_strict_extended80_move,
        !          2425: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          2426:   NULL,
        !          2427: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          2428: 
        !          2429:   /* this does a strict compliance extended80-precision rint: */
        !          2430: #if (defined(TME_HAVE_INT64_T))
        !          2431:   _tme_ieee754_strict_extended80_rint,
        !          2432: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          2433:   NULL,
        !          2434: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          2435: 
        !          2436:   /* this does a strict compliance extended80-precision cos: */
        !          2437:   NULL,
        !          2438: 
        !          2439:   /* this does a strict compliance extended80-precision acos: */
        !          2440:   NULL,
        !          2441: 
        !          2442:   /* this does a strict compliance extended80-precision cosh: */
        !          2443:   NULL,
        !          2444: 
        !          2445:   /* this does a strict compliance extended80-precision sin: */
        !          2446:   NULL,
        !          2447: 
        !          2448:   /* this does a strict compliance extended80-precision asin: */
        !          2449:   NULL,
        !          2450: 
        !          2451:   /* this does a strict compliance extended80-precision sinh: */
        !          2452:   NULL,
        !          2453: 
        !          2454:   /* this does a strict compliance extended80-precision tan: */
        !          2455:   NULL,
        !          2456: 
        !          2457:   /* this does a strict compliance extended80-precision atan: */
        !          2458:   NULL,
        !          2459: 
        !          2460:   /* this does a strict compliance extended80-precision tanh: */
        !          2461:   NULL,
        !          2462: 
        !          2463:   /* this does a strict compliance extended80-precision atanh: */
        !          2464:   NULL,
        !          2465: 
        !          2466:   /* this does a strict compliance extended80-precision exp: */
        !          2467:   NULL,
        !          2468: 
        !          2469:   /* this does a strict compliance extended80-precision expm1: */
        !          2470:   NULL,
        !          2471: 
        !          2472:   /* this does a strict compliance extended80-precision log10: */
        !          2473:   NULL,
        !          2474: 
        !          2475:   /* this does a strict compliance extended80-precision log: */
        !          2476:   NULL,
        !          2477: 
        !          2478:   /* this does a strict compliance extended80-precision log1p: */
        !          2479:   NULL,
        !          2480: 
        !          2481:   /* this does a strict compliance extended80-precision getexp: */
        !          2482:   _tme_ieee754_strict_extended80_getexp,
        !          2483: 
        !          2484:   /* this does a strict compliance extended80-precision getman: */
        !          2485:   _tme_ieee754_strict_extended80_getman,
        !          2486: 
        !          2487:   /* this does a strict compliance extended80-precision scale: */
        !          2488:   NULL,
        !          2489: 
        !          2490:   /* this does a strict compliance extended80-precision pow: */
        !          2491:   NULL,
        !          2492: 
        !          2493:   /* this does a strict compliance extended80-precision from_single: */
        !          2494: #if (defined(TME_HAVE_INT64_T))
        !          2495:   _tme_ieee754_strict_extended80_from_single,
        !          2496: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          2497:   NULL,
        !          2498: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          2499: 
        !          2500:   /* this does a strict compliance extended80-precision from_double: */
        !          2501: #if (defined(TME_HAVE_INT64_T))
        !          2502:   _tme_ieee754_strict_extended80_from_double,
        !          2503: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          2504:   NULL,
        !          2505: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          2506: 
        !          2507:   /* this does a strict compliance extended80-precision from_quad: */
        !          2508: #if (defined(TME_HAVE_INT64_T))
        !          2509:   _tme_ieee754_strict_extended80_from_quad,
        !          2510: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          2511:   NULL,
        !          2512: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          2513: 
        !          2514:   /* this does a strict compliance extended80-precision to_int32: */
        !          2515:   _tme_ieee754_strict_extended80_to_int32,
        !          2516: 
        !          2517:   /* this does a strict compliance extended80-precision to_int64: */
        !          2518:   NULL,
        !          2519: 
        !          2520:   /* this does a strict compliance quad-precision add: */
        !          2521: #if (defined(TME_HAVE_INT64_T))
        !          2522:   _tme_ieee754_strict_quad_add,
        !          2523: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          2524:   NULL,
        !          2525: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          2526: 
        !          2527:   /* this does a strict compliance quad-precision sub: */
        !          2528: #if (defined(TME_HAVE_INT64_T))
        !          2529:   _tme_ieee754_strict_quad_sub,
        !          2530: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          2531:   NULL,
        !          2532: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          2533: 
        !          2534:   /* this does a strict compliance quad-precision mul: */
        !          2535: #if (defined(TME_HAVE_INT64_T))
        !          2536:   _tme_ieee754_strict_quad_mul,
        !          2537: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          2538:   NULL,
        !          2539: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          2540: 
        !          2541:   /* this does a strict compliance quad-precision div: */
        !          2542: #if (defined(TME_HAVE_INT64_T))
        !          2543:   _tme_ieee754_strict_quad_div,
        !          2544: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          2545:   NULL,
        !          2546: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          2547: 
        !          2548:   /* this does a strict compliance quad-precision rem: */
        !          2549: #if (defined(TME_HAVE_INT64_T))
        !          2550:   _tme_ieee754_strict_quad_rem,
        !          2551: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          2552:   NULL,
        !          2553: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          2554: 
        !          2555:   /* this does a strict compliance quad-precision sqrt: */
        !          2556: #if (defined(TME_HAVE_INT64_T))
        !          2557:   _tme_ieee754_strict_quad_sqrt,
        !          2558: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          2559:   NULL,
        !          2560: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          2561: 
        !          2562:   /* this does a strict compliance quad-precision abs: */
        !          2563:   NULL,
        !          2564: 
        !          2565:   /* this does a strict compliance quad-precision neg: */
        !          2566: #if (defined(TME_HAVE_INT64_T))
        !          2567:   _tme_ieee754_strict_quad_neg,
        !          2568: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          2569:   NULL,
        !          2570: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          2571: 
        !          2572:   /* this does a strict compliance quad-precision move: */
        !          2573: #if (defined(TME_HAVE_INT64_T))
        !          2574:   _tme_ieee754_strict_quad_move,
        !          2575: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          2576:   NULL,
        !          2577: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          2578: 
        !          2579:   /* this does a strict compliance quad-precision rint: */
        !          2580: #if (defined(TME_HAVE_INT64_T))
        !          2581:   _tme_ieee754_strict_quad_rint,
        !          2582: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          2583:   NULL,
        !          2584: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          2585: 
        !          2586:   /* this does a strict compliance quad-precision cos: */
        !          2587:   NULL,
        !          2588: 
        !          2589:   /* this does a strict compliance quad-precision acos: */
        !          2590:   NULL,
        !          2591: 
        !          2592:   /* this does a strict compliance quad-precision cosh: */
        !          2593:   NULL,
        !          2594: 
        !          2595:   /* this does a strict compliance quad-precision sin: */
        !          2596:   NULL,
        !          2597: 
        !          2598:   /* this does a strict compliance quad-precision asin: */
        !          2599:   NULL,
        !          2600: 
        !          2601:   /* this does a strict compliance quad-precision sinh: */
        !          2602:   NULL,
        !          2603: 
        !          2604:   /* this does a strict compliance quad-precision tan: */
        !          2605:   NULL,
        !          2606: 
        !          2607:   /* this does a strict compliance quad-precision atan: */
        !          2608:   NULL,
        !          2609: 
        !          2610:   /* this does a strict compliance quad-precision tanh: */
        !          2611:   NULL,
        !          2612: 
        !          2613:   /* this does a strict compliance quad-precision atanh: */
        !          2614:   NULL,
        !          2615: 
        !          2616:   /* this does a strict compliance quad-precision exp: */
        !          2617:   NULL,
        !          2618: 
        !          2619:   /* this does a strict compliance quad-precision expm1: */
        !          2620:   NULL,
        !          2621: 
        !          2622:   /* this does a strict compliance quad-precision log10: */
        !          2623:   NULL,
        !          2624: 
        !          2625:   /* this does a strict compliance quad-precision log: */
        !          2626:   NULL,
        !          2627: 
        !          2628:   /* this does a strict compliance quad-precision log1p: */
        !          2629:   NULL,
        !          2630: 
        !          2631:   /* this does a strict compliance quad-precision getexp: */
        !          2632:   _tme_ieee754_strict_quad_getexp,
        !          2633: 
        !          2634:   /* this does a strict compliance quad-precision getman: */
        !          2635:   _tme_ieee754_strict_quad_getman,
        !          2636: 
        !          2637:   /* this does a strict compliance quad-precision scale: */
        !          2638:   NULL,
        !          2639: 
        !          2640:   /* this does a strict compliance quad-precision pow: */
        !          2641:   NULL,
        !          2642: 
        !          2643:   /* this does a strict compliance quad-precision from_single: */
        !          2644: #if (defined(TME_HAVE_INT64_T))
        !          2645:   _tme_ieee754_strict_quad_from_single,
        !          2646: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          2647:   NULL,
        !          2648: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          2649: 
        !          2650:   /* this does a strict compliance quad-precision from_double: */
        !          2651: #if (defined(TME_HAVE_INT64_T))
        !          2652:   _tme_ieee754_strict_quad_from_double,
        !          2653: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          2654:   NULL,
        !          2655: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          2656: 
        !          2657:   /* this does a strict compliance quad-precision from_extended80: */
        !          2658: #if (defined(TME_HAVE_INT64_T))
        !          2659:   _tme_ieee754_strict_quad_from_extended80,
        !          2660: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          2661:   NULL,
        !          2662: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          2663: 
        !          2664:   /* this does a strict compliance quad-precision to_int32: */
        !          2665:   _tme_ieee754_strict_quad_to_int32,
        !          2666: 
        !          2667:   /* this does a strict compliance quad-precision to_int64: */
        !          2668:   NULL,
        !          2669: };
        !          2670: 
        !          2671: #if (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)
        !          2672: 
        !          2673: /* this does a partial compliance single-precision add: */
        !          2674: static void
        !          2675: _tme_ieee754_partial_single_add(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          2676: {
        !          2677:   int exceptions;
        !          2678: 
        !          2679:   /* check for a NaN operand: */
        !          2680:   if (__tme_predict_false(tme_ieee754_single_check_nan_dyadic(ieee754_ctl, src0, src1, dst))) {
        !          2681:     return;
        !          2682:   }
        !          2683: 
        !          2684:   /* enter native floating-point operation: */
        !          2685:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          2686:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          2687: 
        !          2688:   /* assume that this operation raises no exceptions: */
        !          2689:   exceptions = 0;
        !          2690: 
        !          2691:   /* the operation: */
        !          2692:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN, tme_ieee754_single_value_builtin_get(src0) + tme_ieee754_single_value_builtin_get(src1));
        !          2693: 
        !          2694:   /* leave native floating-point operation: */
        !          2695:   exceptions |= tme_float_leave();
        !          2696:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          2697: 
        !          2698:   /* signal any exceptions: */
        !          2699:   if (exceptions != 0) {
        !          2700:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          2701:   }
        !          2702: }
        !          2703: 
        !          2704: #endif /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE) */
        !          2705: 
        !          2706: #if (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)
        !          2707: 
        !          2708: /* this does a partial compliance single-precision sub: */
        !          2709: static void
        !          2710: _tme_ieee754_partial_single_sub(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          2711: {
        !          2712:   int exceptions;
        !          2713: 
        !          2714:   /* check for a NaN operand: */
        !          2715:   if (__tme_predict_false(tme_ieee754_single_check_nan_dyadic(ieee754_ctl, src0, src1, dst))) {
        !          2716:     return;
        !          2717:   }
        !          2718: 
        !          2719:   /* enter native floating-point operation: */
        !          2720:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          2721:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          2722: 
        !          2723:   /* assume that this operation raises no exceptions: */
        !          2724:   exceptions = 0;
        !          2725: 
        !          2726:   /* the operation: */
        !          2727:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN, tme_ieee754_single_value_builtin_get(src0) - tme_ieee754_single_value_builtin_get(src1));
        !          2728: 
        !          2729:   /* leave native floating-point operation: */
        !          2730:   exceptions |= tme_float_leave();
        !          2731:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          2732: 
        !          2733:   /* signal any exceptions: */
        !          2734:   if (exceptions != 0) {
        !          2735:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          2736:   }
        !          2737: }
        !          2738: 
        !          2739: #endif /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE) */
        !          2740: 
        !          2741: #if (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)
        !          2742: 
        !          2743: /* this does a partial compliance single-precision mul: */
        !          2744: static void
        !          2745: _tme_ieee754_partial_single_mul(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          2746: {
        !          2747:   int exceptions;
        !          2748: 
        !          2749:   /* check for a NaN operand: */
        !          2750:   if (__tme_predict_false(tme_ieee754_single_check_nan_dyadic(ieee754_ctl, src0, src1, dst))) {
        !          2751:     return;
        !          2752:   }
        !          2753: 
        !          2754:   /* enter native floating-point operation: */
        !          2755:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          2756:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          2757: 
        !          2758:   /* assume that this operation raises no exceptions: */
        !          2759:   exceptions = 0;
        !          2760: 
        !          2761:   /* the operation: */
        !          2762:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN, tme_ieee754_single_value_builtin_get(src0) * tme_ieee754_single_value_builtin_get(src1));
        !          2763: 
        !          2764:   /* leave native floating-point operation: */
        !          2765:   exceptions |= tme_float_leave();
        !          2766:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          2767: 
        !          2768:   /* signal any exceptions: */
        !          2769:   if (exceptions != 0) {
        !          2770:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          2771:   }
        !          2772: }
        !          2773: 
        !          2774: #endif /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE) */
        !          2775: 
        !          2776: #if (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)
        !          2777: 
        !          2778: /* this does a partial compliance single-precision div: */
        !          2779: static void
        !          2780: _tme_ieee754_partial_single_div(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          2781: {
        !          2782:   int exceptions;
        !          2783: 
        !          2784:   /* check for a NaN operand: */
        !          2785:   if (__tme_predict_false(tme_ieee754_single_check_nan_dyadic(ieee754_ctl, src0, src1, dst))) {
        !          2786:     return;
        !          2787:   }
        !          2788: 
        !          2789:   /* enter native floating-point operation: */
        !          2790:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          2791:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          2792: 
        !          2793:   /* assume that this operation raises no exceptions: */
        !          2794:   exceptions = 0;
        !          2795: 
        !          2796:   /* the operation: */
        !          2797:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN, tme_ieee754_single_value_builtin_get(src0) / tme_ieee754_single_value_builtin_get(src1));
        !          2798: 
        !          2799:   /* leave native floating-point operation: */
        !          2800:   exceptions |= tme_float_leave();
        !          2801:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          2802: 
        !          2803:   /* signal any exceptions: */
        !          2804:   if (exceptions != 0) {
        !          2805:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          2806:   }
        !          2807: }
        !          2808: 
        !          2809: #endif /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE) */
        !          2810: 
        !          2811: #if (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)
        !          2812: 
        !          2813: /* this does a partial compliance single-precision sqrt: */
        !          2814: static void
        !          2815: _tme_ieee754_partial_single_sqrt(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          2816: {
        !          2817:   int exceptions;
        !          2818: 
        !          2819:   /* check for a NaN operand: */
        !          2820:   if (__tme_predict_false(tme_ieee754_single_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          2821:     return;
        !          2822:   }
        !          2823: 
        !          2824:   /* enter native floating-point operation: */
        !          2825:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          2826:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          2827: 
        !          2828:   /* assume that this operation raises no exceptions: */
        !          2829:   exceptions = 0;
        !          2830: 
        !          2831:   /* the operation: */
        !          2832: #if (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          2833:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, sqrtf(tme_ieee754_single_value_builtin_get(src0)));
        !          2834: #else  /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          2835:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, sqrt(tme_ieee754_single_value_builtin_get(src0)));
        !          2836: #endif /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          2837: 
        !          2838:   /* leave native floating-point operation: */
        !          2839:   exceptions |= tme_float_leave();
        !          2840:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          2841: 
        !          2842:   /* signal any exceptions: */
        !          2843:   if (exceptions != 0) {
        !          2844:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          2845:   }
        !          2846: }
        !          2847: 
        !          2848: #endif /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE) */
        !          2849: 
        !          2850: #if (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)
        !          2851: 
        !          2852: /* this does a partial compliance single-precision abs: */
        !          2853: static void
        !          2854: _tme_ieee754_partial_single_abs(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          2855: {
        !          2856:   int exceptions;
        !          2857: 
        !          2858:   /* check for a NaN operand: */
        !          2859:   if (__tme_predict_false(tme_ieee754_single_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          2860:     return;
        !          2861:   }
        !          2862: 
        !          2863:   /* enter native floating-point operation: */
        !          2864:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          2865:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          2866: 
        !          2867:   /* assume that this operation raises no exceptions: */
        !          2868:   exceptions = 0;
        !          2869: 
        !          2870:   /* the operation: */
        !          2871: #if (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          2872:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, fabsf(tme_ieee754_single_value_builtin_get(src0)));
        !          2873: #else  /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          2874:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, fabs(tme_ieee754_single_value_builtin_get(src0)));
        !          2875: #endif /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          2876: 
        !          2877:   /* leave native floating-point operation: */
        !          2878:   exceptions |= tme_float_leave();
        !          2879:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          2880: 
        !          2881:   /* signal any exceptions: */
        !          2882:   if (exceptions != 0) {
        !          2883:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          2884:   }
        !          2885: }
        !          2886: 
        !          2887: #endif /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE) */
        !          2888: 
        !          2889: #if (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)
        !          2890: 
        !          2891: /* this does a partial compliance single-precision neg: */
        !          2892: static void
        !          2893: _tme_ieee754_partial_single_neg(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          2894: {
        !          2895:   int exceptions;
        !          2896: 
        !          2897:   /* check for a NaN operand: */
        !          2898:   if (__tme_predict_false(tme_ieee754_single_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          2899:     return;
        !          2900:   }
        !          2901: 
        !          2902:   /* enter native floating-point operation: */
        !          2903:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          2904:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          2905: 
        !          2906:   /* assume that this operation raises no exceptions: */
        !          2907:   exceptions = 0;
        !          2908: 
        !          2909:   /* the operation: */
        !          2910:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN, 0 - tme_ieee754_single_value_builtin_get(src0));
        !          2911: 
        !          2912:   /* leave native floating-point operation: */
        !          2913:   exceptions |= tme_float_leave();
        !          2914:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          2915: 
        !          2916:   /* signal any exceptions: */
        !          2917:   if (exceptions != 0) {
        !          2918:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          2919:   }
        !          2920: }
        !          2921: 
        !          2922: #endif /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE) */
        !          2923: 
        !          2924: #if (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)
        !          2925: 
        !          2926: /* this does a partial compliance single-precision move: */
        !          2927: static void
        !          2928: _tme_ieee754_partial_single_move(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          2929: {
        !          2930:   int exceptions;
        !          2931: 
        !          2932:   /* check for a NaN operand: */
        !          2933:   if (__tme_predict_false(tme_ieee754_single_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          2934:     return;
        !          2935:   }
        !          2936: 
        !          2937:   /* enter native floating-point operation: */
        !          2938:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          2939:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          2940: 
        !          2941:   /* assume that this operation raises no exceptions: */
        !          2942:   exceptions = 0;
        !          2943: 
        !          2944:   /* the operation: */
        !          2945:   *dst = *src0;
        !          2946: 
        !          2947:   /* leave native floating-point operation: */
        !          2948:   exceptions |= tme_float_leave();
        !          2949:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          2950: 
        !          2951:   /* signal any exceptions: */
        !          2952:   if (exceptions != 0) {
        !          2953:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          2954:   }
        !          2955: }
        !          2956: 
        !          2957: #endif /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE) */
        !          2958: 
        !          2959: #if (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)
        !          2960: 
        !          2961: /* this does a partial compliance single-precision exp: */
        !          2962: static void
        !          2963: _tme_ieee754_partial_single_exp(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          2964: {
        !          2965:   int exceptions;
        !          2966: 
        !          2967:   /* check for a NaN operand: */
        !          2968:   if (__tme_predict_false(tme_ieee754_single_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          2969:     return;
        !          2970:   }
        !          2971: 
        !          2972:   /* enter native floating-point operation: */
        !          2973:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          2974:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          2975: 
        !          2976:   /* assume that this operation raises no exceptions: */
        !          2977:   exceptions = 0;
        !          2978: 
        !          2979:   /* the operation: */
        !          2980: #if (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          2981:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, expf(tme_ieee754_single_value_builtin_get(src0)));
        !          2982: #else  /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          2983:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, exp(tme_ieee754_single_value_builtin_get(src0)));
        !          2984: #endif /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          2985: 
        !          2986:   /* leave native floating-point operation: */
        !          2987:   exceptions |= tme_float_leave();
        !          2988:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          2989: 
        !          2990:   /* signal any exceptions: */
        !          2991:   if (exceptions != 0) {
        !          2992:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          2993:   }
        !          2994: }
        !          2995: 
        !          2996: #endif /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE) */
        !          2997: 
        !          2998: #if (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)
        !          2999: 
        !          3000: /* this does a partial compliance single-precision log10: */
        !          3001: static void
        !          3002: _tme_ieee754_partial_single_log10(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          3003: {
        !          3004:   int exceptions;
        !          3005: 
        !          3006:   /* check for a NaN operand: */
        !          3007:   if (__tme_predict_false(tme_ieee754_single_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          3008:     return;
        !          3009:   }
        !          3010: 
        !          3011:   /* enter native floating-point operation: */
        !          3012:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          3013:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          3014: 
        !          3015:   /* assume that this operation raises no exceptions: */
        !          3016:   exceptions = 0;
        !          3017: 
        !          3018:   /* the operation: */
        !          3019: #if (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          3020:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, log10f(tme_ieee754_single_value_builtin_get(src0)));
        !          3021: #else  /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          3022:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, log10(tme_ieee754_single_value_builtin_get(src0)));
        !          3023: #endif /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          3024: 
        !          3025:   /* leave native floating-point operation: */
        !          3026:   exceptions |= tme_float_leave();
        !          3027:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          3028: 
        !          3029:   /* signal any exceptions: */
        !          3030:   if (exceptions != 0) {
        !          3031:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          3032:   }
        !          3033: }
        !          3034: 
        !          3035: #endif /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE) */
        !          3036: 
        !          3037: #if (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)
        !          3038: 
        !          3039: /* this does a partial compliance single-precision log: */
        !          3040: static void
        !          3041: _tme_ieee754_partial_single_log(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          3042: {
        !          3043:   int exceptions;
        !          3044: 
        !          3045:   /* check for a NaN operand: */
        !          3046:   if (__tme_predict_false(tme_ieee754_single_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          3047:     return;
        !          3048:   }
        !          3049: 
        !          3050:   /* enter native floating-point operation: */
        !          3051:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          3052:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          3053: 
        !          3054:   /* assume that this operation raises no exceptions: */
        !          3055:   exceptions = 0;
        !          3056: 
        !          3057:   /* the operation: */
        !          3058: #if (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          3059:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, logf(tme_ieee754_single_value_builtin_get(src0)));
        !          3060: #else  /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          3061:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, log(tme_ieee754_single_value_builtin_get(src0)));
        !          3062: #endif /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          3063: 
        !          3064:   /* leave native floating-point operation: */
        !          3065:   exceptions |= tme_float_leave();
        !          3066:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          3067: 
        !          3068:   /* signal any exceptions: */
        !          3069:   if (exceptions != 0) {
        !          3070:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          3071:   }
        !          3072: }
        !          3073: 
        !          3074: #endif /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE) */
        !          3075: 
        !          3076: #if (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)
        !          3077: 
        !          3078: /* this does a partial compliance single-precision scale: */
        !          3079: static void
        !          3080: _tme_ieee754_partial_single_scale(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          3081: {
        !          3082:   int exceptions;
        !          3083: 
        !          3084:   /* check for a NaN operand: */
        !          3085:   if (__tme_predict_false(tme_ieee754_single_check_nan_dyadic(ieee754_ctl, src0, src1, dst))) {
        !          3086:     return;
        !          3087:   }
        !          3088: 
        !          3089:   /* enter native floating-point operation: */
        !          3090:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          3091:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          3092: 
        !          3093:   /* assume that this operation raises no exceptions: */
        !          3094:   exceptions = 0;
        !          3095: 
        !          3096:   /* the operation: */
        !          3097: #if (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          3098:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, scalbnf(tme_ieee754_single_value_builtin_get(src0), tme_ieee754_single_value_builtin_get(src1)));
        !          3099: #else  /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          3100:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, scalbn(tme_ieee754_single_value_builtin_get(src0), tme_ieee754_single_value_builtin_get(src1)));
        !          3101: #endif /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          3102: 
        !          3103:   /* leave native floating-point operation: */
        !          3104:   exceptions |= tme_float_leave();
        !          3105:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          3106: 
        !          3107:   /* signal any exceptions: */
        !          3108:   if (exceptions != 0) {
        !          3109:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          3110:   }
        !          3111: }
        !          3112: 
        !          3113: #endif /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE) */
        !          3114: 
        !          3115: #if (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)
        !          3116: 
        !          3117: /* this does a partial compliance single-precision pow: */
        !          3118: static void
        !          3119: _tme_ieee754_partial_single_pow(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          3120: {
        !          3121:   int exceptions;
        !          3122: 
        !          3123:   /* check for a NaN operand: */
        !          3124:   if (__tme_predict_false(tme_ieee754_single_check_nan_dyadic(ieee754_ctl, src0, src1, dst))) {
        !          3125:     return;
        !          3126:   }
        !          3127: 
        !          3128:   /* enter native floating-point operation: */
        !          3129:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          3130:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          3131: 
        !          3132:   /* assume that this operation raises no exceptions: */
        !          3133:   exceptions = 0;
        !          3134: 
        !          3135:   /* the operation: */
        !          3136: #if (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          3137:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, powf(tme_ieee754_single_value_builtin_get(src0), tme_ieee754_single_value_builtin_get(src1)));
        !          3138: #else  /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          3139:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, pow(tme_ieee754_single_value_builtin_get(src0), tme_ieee754_single_value_builtin_get(src1)));
        !          3140: #endif /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          3141: 
        !          3142:   /* leave native floating-point operation: */
        !          3143:   exceptions |= tme_float_leave();
        !          3144:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          3145: 
        !          3146:   /* signal any exceptions: */
        !          3147:   if (exceptions != 0) {
        !          3148:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          3149:   }
        !          3150: }
        !          3151: 
        !          3152: #endif /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE) */
        !          3153: 
        !          3154: #if (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)
        !          3155: 
        !          3156: /* this does a partial compliance double-precision add: */
        !          3157: static void
        !          3158: _tme_ieee754_partial_double_add(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          3159: {
        !          3160:   int exceptions;
        !          3161: 
        !          3162:   /* check for a NaN operand: */
        !          3163:   if (__tme_predict_false(tme_ieee754_double_check_nan_dyadic(ieee754_ctl, src0, src1, dst))) {
        !          3164:     return;
        !          3165:   }
        !          3166: 
        !          3167:   /* enter native floating-point operation: */
        !          3168:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          3169:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          3170: 
        !          3171:   /* assume that this operation raises no exceptions: */
        !          3172:   exceptions = 0;
        !          3173: 
        !          3174:   /* the operation: */
        !          3175:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN, tme_ieee754_double_value_builtin_get(src0) + tme_ieee754_double_value_builtin_get(src1));
        !          3176: 
        !          3177:   /* leave native floating-point operation: */
        !          3178:   exceptions |= tme_float_leave();
        !          3179:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          3180: 
        !          3181:   /* signal any exceptions: */
        !          3182:   if (exceptions != 0) {
        !          3183:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          3184:   }
        !          3185: }
        !          3186: 
        !          3187: #endif /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE) */
        !          3188: 
        !          3189: #if (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)
        !          3190: 
        !          3191: /* this does a partial compliance double-precision sub: */
        !          3192: static void
        !          3193: _tme_ieee754_partial_double_sub(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          3194: {
        !          3195:   int exceptions;
        !          3196: 
        !          3197:   /* check for a NaN operand: */
        !          3198:   if (__tme_predict_false(tme_ieee754_double_check_nan_dyadic(ieee754_ctl, src0, src1, dst))) {
        !          3199:     return;
        !          3200:   }
        !          3201: 
        !          3202:   /* enter native floating-point operation: */
        !          3203:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          3204:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          3205: 
        !          3206:   /* assume that this operation raises no exceptions: */
        !          3207:   exceptions = 0;
        !          3208: 
        !          3209:   /* the operation: */
        !          3210:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN, tme_ieee754_double_value_builtin_get(src0) - tme_ieee754_double_value_builtin_get(src1));
        !          3211: 
        !          3212:   /* leave native floating-point operation: */
        !          3213:   exceptions |= tme_float_leave();
        !          3214:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          3215: 
        !          3216:   /* signal any exceptions: */
        !          3217:   if (exceptions != 0) {
        !          3218:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          3219:   }
        !          3220: }
        !          3221: 
        !          3222: #endif /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE) */
        !          3223: 
        !          3224: #if (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)
        !          3225: 
        !          3226: /* this does a partial compliance double-precision mul: */
        !          3227: static void
        !          3228: _tme_ieee754_partial_double_mul(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          3229: {
        !          3230:   int exceptions;
        !          3231: 
        !          3232:   /* check for a NaN operand: */
        !          3233:   if (__tme_predict_false(tme_ieee754_double_check_nan_dyadic(ieee754_ctl, src0, src1, dst))) {
        !          3234:     return;
        !          3235:   }
        !          3236: 
        !          3237:   /* enter native floating-point operation: */
        !          3238:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          3239:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          3240: 
        !          3241:   /* assume that this operation raises no exceptions: */
        !          3242:   exceptions = 0;
        !          3243: 
        !          3244:   /* the operation: */
        !          3245:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN, tme_ieee754_double_value_builtin_get(src0) * tme_ieee754_double_value_builtin_get(src1));
        !          3246: 
        !          3247:   /* leave native floating-point operation: */
        !          3248:   exceptions |= tme_float_leave();
        !          3249:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          3250: 
        !          3251:   /* signal any exceptions: */
        !          3252:   if (exceptions != 0) {
        !          3253:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          3254:   }
        !          3255: }
        !          3256: 
        !          3257: #endif /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE) */
        !          3258: 
        !          3259: #if (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)
        !          3260: 
        !          3261: /* this does a partial compliance double-precision div: */
        !          3262: static void
        !          3263: _tme_ieee754_partial_double_div(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          3264: {
        !          3265:   int exceptions;
        !          3266: 
        !          3267:   /* check for a NaN operand: */
        !          3268:   if (__tme_predict_false(tme_ieee754_double_check_nan_dyadic(ieee754_ctl, src0, src1, dst))) {
        !          3269:     return;
        !          3270:   }
        !          3271: 
        !          3272:   /* enter native floating-point operation: */
        !          3273:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          3274:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          3275: 
        !          3276:   /* assume that this operation raises no exceptions: */
        !          3277:   exceptions = 0;
        !          3278: 
        !          3279:   /* the operation: */
        !          3280:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN, tme_ieee754_double_value_builtin_get(src0) / tme_ieee754_double_value_builtin_get(src1));
        !          3281: 
        !          3282:   /* leave native floating-point operation: */
        !          3283:   exceptions |= tme_float_leave();
        !          3284:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          3285: 
        !          3286:   /* signal any exceptions: */
        !          3287:   if (exceptions != 0) {
        !          3288:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          3289:   }
        !          3290: }
        !          3291: 
        !          3292: #endif /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE) */
        !          3293: 
        !          3294: #if (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)
        !          3295: 
        !          3296: /* this does a partial compliance double-precision sqrt: */
        !          3297: static void
        !          3298: _tme_ieee754_partial_double_sqrt(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          3299: {
        !          3300:   int exceptions;
        !          3301: 
        !          3302:   /* check for a NaN operand: */
        !          3303:   if (__tme_predict_false(tme_ieee754_double_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          3304:     return;
        !          3305:   }
        !          3306: 
        !          3307:   /* enter native floating-point operation: */
        !          3308:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          3309:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          3310: 
        !          3311:   /* assume that this operation raises no exceptions: */
        !          3312:   exceptions = 0;
        !          3313: 
        !          3314:   /* the operation: */
        !          3315: #if (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          3316:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, sqrtf(tme_ieee754_double_value_builtin_get(src0)));
        !          3317: #else  /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          3318:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, sqrt(tme_ieee754_double_value_builtin_get(src0)));
        !          3319: #endif /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          3320: 
        !          3321:   /* leave native floating-point operation: */
        !          3322:   exceptions |= tme_float_leave();
        !          3323:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          3324: 
        !          3325:   /* signal any exceptions: */
        !          3326:   if (exceptions != 0) {
        !          3327:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          3328:   }
        !          3329: }
        !          3330: 
        !          3331: #endif /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE) */
        !          3332: 
        !          3333: #if (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)
        !          3334: 
        !          3335: /* this does a partial compliance double-precision abs: */
        !          3336: static void
        !          3337: _tme_ieee754_partial_double_abs(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          3338: {
        !          3339:   int exceptions;
        !          3340: 
        !          3341:   /* check for a NaN operand: */
        !          3342:   if (__tme_predict_false(tme_ieee754_double_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          3343:     return;
        !          3344:   }
        !          3345: 
        !          3346:   /* enter native floating-point operation: */
        !          3347:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          3348:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          3349: 
        !          3350:   /* assume that this operation raises no exceptions: */
        !          3351:   exceptions = 0;
        !          3352: 
        !          3353:   /* the operation: */
        !          3354: #if (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          3355:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, fabsf(tme_ieee754_double_value_builtin_get(src0)));
        !          3356: #else  /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          3357:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, fabs(tme_ieee754_double_value_builtin_get(src0)));
        !          3358: #endif /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          3359: 
        !          3360:   /* leave native floating-point operation: */
        !          3361:   exceptions |= tme_float_leave();
        !          3362:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          3363: 
        !          3364:   /* signal any exceptions: */
        !          3365:   if (exceptions != 0) {
        !          3366:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          3367:   }
        !          3368: }
        !          3369: 
        !          3370: #endif /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE) */
        !          3371: 
        !          3372: #if (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)
        !          3373: 
        !          3374: /* this does a partial compliance double-precision neg: */
        !          3375: static void
        !          3376: _tme_ieee754_partial_double_neg(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          3377: {
        !          3378:   int exceptions;
        !          3379: 
        !          3380:   /* check for a NaN operand: */
        !          3381:   if (__tme_predict_false(tme_ieee754_double_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          3382:     return;
        !          3383:   }
        !          3384: 
        !          3385:   /* enter native floating-point operation: */
        !          3386:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          3387:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          3388: 
        !          3389:   /* assume that this operation raises no exceptions: */
        !          3390:   exceptions = 0;
        !          3391: 
        !          3392:   /* the operation: */
        !          3393:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN, 0 - tme_ieee754_double_value_builtin_get(src0));
        !          3394: 
        !          3395:   /* leave native floating-point operation: */
        !          3396:   exceptions |= tme_float_leave();
        !          3397:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          3398: 
        !          3399:   /* signal any exceptions: */
        !          3400:   if (exceptions != 0) {
        !          3401:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          3402:   }
        !          3403: }
        !          3404: 
        !          3405: #endif /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE) */
        !          3406: 
        !          3407: #if (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)
        !          3408: 
        !          3409: /* this does a partial compliance double-precision move: */
        !          3410: static void
        !          3411: _tme_ieee754_partial_double_move(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          3412: {
        !          3413:   int exceptions;
        !          3414: 
        !          3415:   /* check for a NaN operand: */
        !          3416:   if (__tme_predict_false(tme_ieee754_double_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          3417:     return;
        !          3418:   }
        !          3419: 
        !          3420:   /* enter native floating-point operation: */
        !          3421:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          3422:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          3423: 
        !          3424:   /* assume that this operation raises no exceptions: */
        !          3425:   exceptions = 0;
        !          3426: 
        !          3427:   /* the operation: */
        !          3428:   *dst = *src0;
        !          3429: 
        !          3430:   /* leave native floating-point operation: */
        !          3431:   exceptions |= tme_float_leave();
        !          3432:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          3433: 
        !          3434:   /* signal any exceptions: */
        !          3435:   if (exceptions != 0) {
        !          3436:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          3437:   }
        !          3438: }
        !          3439: 
        !          3440: #endif /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE) */
        !          3441: 
        !          3442: #if (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)
        !          3443: 
        !          3444: /* this does a partial compliance double-precision exp: */
        !          3445: static void
        !          3446: _tme_ieee754_partial_double_exp(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          3447: {
        !          3448:   int exceptions;
        !          3449: 
        !          3450:   /* check for a NaN operand: */
        !          3451:   if (__tme_predict_false(tme_ieee754_double_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          3452:     return;
        !          3453:   }
        !          3454: 
        !          3455:   /* enter native floating-point operation: */
        !          3456:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          3457:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          3458: 
        !          3459:   /* assume that this operation raises no exceptions: */
        !          3460:   exceptions = 0;
        !          3461: 
        !          3462:   /* the operation: */
        !          3463: #if (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          3464:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, expf(tme_ieee754_double_value_builtin_get(src0)));
        !          3465: #else  /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          3466:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, exp(tme_ieee754_double_value_builtin_get(src0)));
        !          3467: #endif /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          3468: 
        !          3469:   /* leave native floating-point operation: */
        !          3470:   exceptions |= tme_float_leave();
        !          3471:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          3472: 
        !          3473:   /* signal any exceptions: */
        !          3474:   if (exceptions != 0) {
        !          3475:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          3476:   }
        !          3477: }
        !          3478: 
        !          3479: #endif /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE) */
        !          3480: 
        !          3481: #if (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)
        !          3482: 
        !          3483: /* this does a partial compliance double-precision log10: */
        !          3484: static void
        !          3485: _tme_ieee754_partial_double_log10(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          3486: {
        !          3487:   int exceptions;
        !          3488: 
        !          3489:   /* check for a NaN operand: */
        !          3490:   if (__tme_predict_false(tme_ieee754_double_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          3491:     return;
        !          3492:   }
        !          3493: 
        !          3494:   /* enter native floating-point operation: */
        !          3495:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          3496:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          3497: 
        !          3498:   /* assume that this operation raises no exceptions: */
        !          3499:   exceptions = 0;
        !          3500: 
        !          3501:   /* the operation: */
        !          3502: #if (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          3503:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, log10f(tme_ieee754_double_value_builtin_get(src0)));
        !          3504: #else  /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          3505:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, log10(tme_ieee754_double_value_builtin_get(src0)));
        !          3506: #endif /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          3507: 
        !          3508:   /* leave native floating-point operation: */
        !          3509:   exceptions |= tme_float_leave();
        !          3510:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          3511: 
        !          3512:   /* signal any exceptions: */
        !          3513:   if (exceptions != 0) {
        !          3514:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          3515:   }
        !          3516: }
        !          3517: 
        !          3518: #endif /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE) */
        !          3519: 
        !          3520: #if (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)
        !          3521: 
        !          3522: /* this does a partial compliance double-precision log: */
        !          3523: static void
        !          3524: _tme_ieee754_partial_double_log(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          3525: {
        !          3526:   int exceptions;
        !          3527: 
        !          3528:   /* check for a NaN operand: */
        !          3529:   if (__tme_predict_false(tme_ieee754_double_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          3530:     return;
        !          3531:   }
        !          3532: 
        !          3533:   /* enter native floating-point operation: */
        !          3534:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          3535:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          3536: 
        !          3537:   /* assume that this operation raises no exceptions: */
        !          3538:   exceptions = 0;
        !          3539: 
        !          3540:   /* the operation: */
        !          3541: #if (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          3542:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, logf(tme_ieee754_double_value_builtin_get(src0)));
        !          3543: #else  /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          3544:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, log(tme_ieee754_double_value_builtin_get(src0)));
        !          3545: #endif /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          3546: 
        !          3547:   /* leave native floating-point operation: */
        !          3548:   exceptions |= tme_float_leave();
        !          3549:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          3550: 
        !          3551:   /* signal any exceptions: */
        !          3552:   if (exceptions != 0) {
        !          3553:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          3554:   }
        !          3555: }
        !          3556: 
        !          3557: #endif /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE) */
        !          3558: 
        !          3559: #if (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)
        !          3560: 
        !          3561: /* this does a partial compliance double-precision scale: */
        !          3562: static void
        !          3563: _tme_ieee754_partial_double_scale(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          3564: {
        !          3565:   int exceptions;
        !          3566: 
        !          3567:   /* check for a NaN operand: */
        !          3568:   if (__tme_predict_false(tme_ieee754_double_check_nan_dyadic(ieee754_ctl, src0, src1, dst))) {
        !          3569:     return;
        !          3570:   }
        !          3571: 
        !          3572:   /* enter native floating-point operation: */
        !          3573:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          3574:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          3575: 
        !          3576:   /* assume that this operation raises no exceptions: */
        !          3577:   exceptions = 0;
        !          3578: 
        !          3579:   /* the operation: */
        !          3580: #if (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          3581:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, scalbnf(tme_ieee754_double_value_builtin_get(src0), tme_ieee754_double_value_builtin_get(src1)));
        !          3582: #else  /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          3583:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, scalbn(tme_ieee754_double_value_builtin_get(src0), tme_ieee754_double_value_builtin_get(src1)));
        !          3584: #endif /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          3585: 
        !          3586:   /* leave native floating-point operation: */
        !          3587:   exceptions |= tme_float_leave();
        !          3588:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          3589: 
        !          3590:   /* signal any exceptions: */
        !          3591:   if (exceptions != 0) {
        !          3592:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          3593:   }
        !          3594: }
        !          3595: 
        !          3596: #endif /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE) */
        !          3597: 
        !          3598: #if (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)
        !          3599: 
        !          3600: /* this does a partial compliance double-precision pow: */
        !          3601: static void
        !          3602: _tme_ieee754_partial_double_pow(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          3603: {
        !          3604:   int exceptions;
        !          3605: 
        !          3606:   /* check for a NaN operand: */
        !          3607:   if (__tme_predict_false(tme_ieee754_double_check_nan_dyadic(ieee754_ctl, src0, src1, dst))) {
        !          3608:     return;
        !          3609:   }
        !          3610: 
        !          3611:   /* enter native floating-point operation: */
        !          3612:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          3613:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          3614: 
        !          3615:   /* assume that this operation raises no exceptions: */
        !          3616:   exceptions = 0;
        !          3617: 
        !          3618:   /* the operation: */
        !          3619: #if (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          3620:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, powf(tme_ieee754_double_value_builtin_get(src0), tme_ieee754_double_value_builtin_get(src1)));
        !          3621: #else  /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          3622:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, pow(tme_ieee754_double_value_builtin_get(src0), tme_ieee754_double_value_builtin_get(src1)));
        !          3623: #endif /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          3624: 
        !          3625:   /* leave native floating-point operation: */
        !          3626:   exceptions |= tme_float_leave();
        !          3627:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          3628: 
        !          3629:   /* signal any exceptions: */
        !          3630:   if (exceptions != 0) {
        !          3631:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          3632:   }
        !          3633: }
        !          3634: 
        !          3635: #endif /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE) */
        !          3636: 
        !          3637: #if (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)
        !          3638: 
        !          3639: /* this does a partial compliance extended80-precision add: */
        !          3640: static void
        !          3641: _tme_ieee754_partial_extended80_add(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          3642: {
        !          3643:   int exceptions;
        !          3644: 
        !          3645:   /* check for a NaN operand: */
        !          3646:   if (__tme_predict_false(tme_ieee754_extended80_check_nan_dyadic(ieee754_ctl, src0, src1, dst))) {
        !          3647:     return;
        !          3648:   }
        !          3649: 
        !          3650:   /* enter native floating-point operation: */
        !          3651:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          3652:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          3653: 
        !          3654:   /* assume that this operation raises no exceptions: */
        !          3655:   exceptions = 0;
        !          3656: 
        !          3657:   /* the operation: */
        !          3658:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN, tme_ieee754_extended80_value_builtin_get(src0) + tme_ieee754_extended80_value_builtin_get(src1));
        !          3659: 
        !          3660:   /* leave native floating-point operation: */
        !          3661:   exceptions |= tme_float_leave();
        !          3662:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          3663: 
        !          3664:   /* signal any exceptions: */
        !          3665:   if (exceptions != 0) {
        !          3666:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          3667:   }
        !          3668: }
        !          3669: 
        !          3670: #endif /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80) */
        !          3671: 
        !          3672: #if (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)
        !          3673: 
        !          3674: /* this does a partial compliance extended80-precision sub: */
        !          3675: static void
        !          3676: _tme_ieee754_partial_extended80_sub(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          3677: {
        !          3678:   int exceptions;
        !          3679: 
        !          3680:   /* check for a NaN operand: */
        !          3681:   if (__tme_predict_false(tme_ieee754_extended80_check_nan_dyadic(ieee754_ctl, src0, src1, dst))) {
        !          3682:     return;
        !          3683:   }
        !          3684: 
        !          3685:   /* enter native floating-point operation: */
        !          3686:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          3687:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          3688: 
        !          3689:   /* assume that this operation raises no exceptions: */
        !          3690:   exceptions = 0;
        !          3691: 
        !          3692:   /* the operation: */
        !          3693:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN, tme_ieee754_extended80_value_builtin_get(src0) - tme_ieee754_extended80_value_builtin_get(src1));
        !          3694: 
        !          3695:   /* leave native floating-point operation: */
        !          3696:   exceptions |= tme_float_leave();
        !          3697:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          3698: 
        !          3699:   /* signal any exceptions: */
        !          3700:   if (exceptions != 0) {
        !          3701:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          3702:   }
        !          3703: }
        !          3704: 
        !          3705: #endif /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80) */
        !          3706: 
        !          3707: #if (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)
        !          3708: 
        !          3709: /* this does a partial compliance extended80-precision mul: */
        !          3710: static void
        !          3711: _tme_ieee754_partial_extended80_mul(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          3712: {
        !          3713:   int exceptions;
        !          3714: 
        !          3715:   /* check for a NaN operand: */
        !          3716:   if (__tme_predict_false(tme_ieee754_extended80_check_nan_dyadic(ieee754_ctl, src0, src1, dst))) {
        !          3717:     return;
        !          3718:   }
        !          3719: 
        !          3720:   /* enter native floating-point operation: */
        !          3721:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          3722:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          3723: 
        !          3724:   /* assume that this operation raises no exceptions: */
        !          3725:   exceptions = 0;
        !          3726: 
        !          3727:   /* the operation: */
        !          3728:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN, tme_ieee754_extended80_value_builtin_get(src0) * tme_ieee754_extended80_value_builtin_get(src1));
        !          3729: 
        !          3730:   /* leave native floating-point operation: */
        !          3731:   exceptions |= tme_float_leave();
        !          3732:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          3733: 
        !          3734:   /* signal any exceptions: */
        !          3735:   if (exceptions != 0) {
        !          3736:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          3737:   }
        !          3738: }
        !          3739: 
        !          3740: #endif /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80) */
        !          3741: 
        !          3742: #if (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)
        !          3743: 
        !          3744: /* this does a partial compliance extended80-precision div: */
        !          3745: static void
        !          3746: _tme_ieee754_partial_extended80_div(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          3747: {
        !          3748:   int exceptions;
        !          3749: 
        !          3750:   /* check for a NaN operand: */
        !          3751:   if (__tme_predict_false(tme_ieee754_extended80_check_nan_dyadic(ieee754_ctl, src0, src1, dst))) {
        !          3752:     return;
        !          3753:   }
        !          3754: 
        !          3755:   /* enter native floating-point operation: */
        !          3756:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          3757:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          3758: 
        !          3759:   /* assume that this operation raises no exceptions: */
        !          3760:   exceptions = 0;
        !          3761: 
        !          3762:   /* the operation: */
        !          3763:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN, tme_ieee754_extended80_value_builtin_get(src0) / tme_ieee754_extended80_value_builtin_get(src1));
        !          3764: 
        !          3765:   /* leave native floating-point operation: */
        !          3766:   exceptions |= tme_float_leave();
        !          3767:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          3768: 
        !          3769:   /* signal any exceptions: */
        !          3770:   if (exceptions != 0) {
        !          3771:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          3772:   }
        !          3773: }
        !          3774: 
        !          3775: #endif /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80) */
        !          3776: 
        !          3777: #if (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)
        !          3778: 
        !          3779: /* this does a partial compliance extended80-precision sqrt: */
        !          3780: static void
        !          3781: _tme_ieee754_partial_extended80_sqrt(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          3782: {
        !          3783:   int exceptions;
        !          3784: 
        !          3785:   /* check for a NaN operand: */
        !          3786:   if (__tme_predict_false(tme_ieee754_extended80_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          3787:     return;
        !          3788:   }
        !          3789: 
        !          3790:   /* enter native floating-point operation: */
        !          3791:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          3792:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          3793: 
        !          3794:   /* assume that this operation raises no exceptions: */
        !          3795:   exceptions = 0;
        !          3796: 
        !          3797:   /* the operation: */
        !          3798: #if (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          3799:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, sqrtf(tme_ieee754_extended80_value_builtin_get(src0)));
        !          3800: #else  /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          3801:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, sqrt(tme_ieee754_extended80_value_builtin_get(src0)));
        !          3802: #endif /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          3803: 
        !          3804:   /* leave native floating-point operation: */
        !          3805:   exceptions |= tme_float_leave();
        !          3806:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          3807: 
        !          3808:   /* signal any exceptions: */
        !          3809:   if (exceptions != 0) {
        !          3810:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          3811:   }
        !          3812: }
        !          3813: 
        !          3814: #endif /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80) */
        !          3815: 
        !          3816: #if (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)
        !          3817: 
        !          3818: /* this does a partial compliance extended80-precision abs: */
        !          3819: static void
        !          3820: _tme_ieee754_partial_extended80_abs(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          3821: {
        !          3822:   int exceptions;
        !          3823: 
        !          3824:   /* check for a NaN operand: */
        !          3825:   if (__tme_predict_false(tme_ieee754_extended80_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          3826:     return;
        !          3827:   }
        !          3828: 
        !          3829:   /* enter native floating-point operation: */
        !          3830:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          3831:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          3832: 
        !          3833:   /* assume that this operation raises no exceptions: */
        !          3834:   exceptions = 0;
        !          3835: 
        !          3836:   /* the operation: */
        !          3837: #if (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          3838:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, fabsf(tme_ieee754_extended80_value_builtin_get(src0)));
        !          3839: #else  /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          3840:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, fabs(tme_ieee754_extended80_value_builtin_get(src0)));
        !          3841: #endif /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          3842: 
        !          3843:   /* leave native floating-point operation: */
        !          3844:   exceptions |= tme_float_leave();
        !          3845:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          3846: 
        !          3847:   /* signal any exceptions: */
        !          3848:   if (exceptions != 0) {
        !          3849:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          3850:   }
        !          3851: }
        !          3852: 
        !          3853: #endif /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80) */
        !          3854: 
        !          3855: #if (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)
        !          3856: 
        !          3857: /* this does a partial compliance extended80-precision neg: */
        !          3858: static void
        !          3859: _tme_ieee754_partial_extended80_neg(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          3860: {
        !          3861:   int exceptions;
        !          3862: 
        !          3863:   /* check for a NaN operand: */
        !          3864:   if (__tme_predict_false(tme_ieee754_extended80_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          3865:     return;
        !          3866:   }
        !          3867: 
        !          3868:   /* enter native floating-point operation: */
        !          3869:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          3870:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          3871: 
        !          3872:   /* assume that this operation raises no exceptions: */
        !          3873:   exceptions = 0;
        !          3874: 
        !          3875:   /* the operation: */
        !          3876:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN, 0 - tme_ieee754_extended80_value_builtin_get(src0));
        !          3877: 
        !          3878:   /* leave native floating-point operation: */
        !          3879:   exceptions |= tme_float_leave();
        !          3880:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          3881: 
        !          3882:   /* signal any exceptions: */
        !          3883:   if (exceptions != 0) {
        !          3884:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          3885:   }
        !          3886: }
        !          3887: 
        !          3888: #endif /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80) */
        !          3889: 
        !          3890: #if (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)
        !          3891: 
        !          3892: /* this does a partial compliance extended80-precision move: */
        !          3893: static void
        !          3894: _tme_ieee754_partial_extended80_move(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          3895: {
        !          3896:   int exceptions;
        !          3897: 
        !          3898:   /* check for a NaN operand: */
        !          3899:   if (__tme_predict_false(tme_ieee754_extended80_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          3900:     return;
        !          3901:   }
        !          3902: 
        !          3903:   /* enter native floating-point operation: */
        !          3904:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          3905:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          3906: 
        !          3907:   /* assume that this operation raises no exceptions: */
        !          3908:   exceptions = 0;
        !          3909: 
        !          3910:   /* the operation: */
        !          3911:   *dst = *src0;
        !          3912: 
        !          3913:   /* leave native floating-point operation: */
        !          3914:   exceptions |= tme_float_leave();
        !          3915:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          3916: 
        !          3917:   /* signal any exceptions: */
        !          3918:   if (exceptions != 0) {
        !          3919:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          3920:   }
        !          3921: }
        !          3922: 
        !          3923: #endif /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80) */
        !          3924: 
        !          3925: #if (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)
        !          3926: 
        !          3927: /* this does a partial compliance extended80-precision exp: */
        !          3928: static void
        !          3929: _tme_ieee754_partial_extended80_exp(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          3930: {
        !          3931:   int exceptions;
        !          3932: 
        !          3933:   /* check for a NaN operand: */
        !          3934:   if (__tme_predict_false(tme_ieee754_extended80_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          3935:     return;
        !          3936:   }
        !          3937: 
        !          3938:   /* enter native floating-point operation: */
        !          3939:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          3940:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          3941: 
        !          3942:   /* assume that this operation raises no exceptions: */
        !          3943:   exceptions = 0;
        !          3944: 
        !          3945:   /* the operation: */
        !          3946: #if (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          3947:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, expf(tme_ieee754_extended80_value_builtin_get(src0)));
        !          3948: #else  /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          3949:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, exp(tme_ieee754_extended80_value_builtin_get(src0)));
        !          3950: #endif /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          3951: 
        !          3952:   /* leave native floating-point operation: */
        !          3953:   exceptions |= tme_float_leave();
        !          3954:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          3955: 
        !          3956:   /* signal any exceptions: */
        !          3957:   if (exceptions != 0) {
        !          3958:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          3959:   }
        !          3960: }
        !          3961: 
        !          3962: #endif /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80) */
        !          3963: 
        !          3964: #if (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)
        !          3965: 
        !          3966: /* this does a partial compliance extended80-precision log10: */
        !          3967: static void
        !          3968: _tme_ieee754_partial_extended80_log10(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          3969: {
        !          3970:   int exceptions;
        !          3971: 
        !          3972:   /* check for a NaN operand: */
        !          3973:   if (__tme_predict_false(tme_ieee754_extended80_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          3974:     return;
        !          3975:   }
        !          3976: 
        !          3977:   /* enter native floating-point operation: */
        !          3978:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          3979:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          3980: 
        !          3981:   /* assume that this operation raises no exceptions: */
        !          3982:   exceptions = 0;
        !          3983: 
        !          3984:   /* the operation: */
        !          3985: #if (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          3986:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, log10f(tme_ieee754_extended80_value_builtin_get(src0)));
        !          3987: #else  /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          3988:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, log10(tme_ieee754_extended80_value_builtin_get(src0)));
        !          3989: #endif /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          3990: 
        !          3991:   /* leave native floating-point operation: */
        !          3992:   exceptions |= tme_float_leave();
        !          3993:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          3994: 
        !          3995:   /* signal any exceptions: */
        !          3996:   if (exceptions != 0) {
        !          3997:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          3998:   }
        !          3999: }
        !          4000: 
        !          4001: #endif /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80) */
        !          4002: 
        !          4003: #if (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)
        !          4004: 
        !          4005: /* this does a partial compliance extended80-precision log: */
        !          4006: static void
        !          4007: _tme_ieee754_partial_extended80_log(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          4008: {
        !          4009:   int exceptions;
        !          4010: 
        !          4011:   /* check for a NaN operand: */
        !          4012:   if (__tme_predict_false(tme_ieee754_extended80_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          4013:     return;
        !          4014:   }
        !          4015: 
        !          4016:   /* enter native floating-point operation: */
        !          4017:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          4018:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          4019: 
        !          4020:   /* assume that this operation raises no exceptions: */
        !          4021:   exceptions = 0;
        !          4022: 
        !          4023:   /* the operation: */
        !          4024: #if (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          4025:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, logf(tme_ieee754_extended80_value_builtin_get(src0)));
        !          4026: #else  /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          4027:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, log(tme_ieee754_extended80_value_builtin_get(src0)));
        !          4028: #endif /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          4029: 
        !          4030:   /* leave native floating-point operation: */
        !          4031:   exceptions |= tme_float_leave();
        !          4032:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          4033: 
        !          4034:   /* signal any exceptions: */
        !          4035:   if (exceptions != 0) {
        !          4036:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          4037:   }
        !          4038: }
        !          4039: 
        !          4040: #endif /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80) */
        !          4041: 
        !          4042: #if (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)
        !          4043: 
        !          4044: /* this does a partial compliance extended80-precision scale: */
        !          4045: static void
        !          4046: _tme_ieee754_partial_extended80_scale(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          4047: {
        !          4048:   int exceptions;
        !          4049: 
        !          4050:   /* check for a NaN operand: */
        !          4051:   if (__tme_predict_false(tme_ieee754_extended80_check_nan_dyadic(ieee754_ctl, src0, src1, dst))) {
        !          4052:     return;
        !          4053:   }
        !          4054: 
        !          4055:   /* enter native floating-point operation: */
        !          4056:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          4057:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          4058: 
        !          4059:   /* assume that this operation raises no exceptions: */
        !          4060:   exceptions = 0;
        !          4061: 
        !          4062:   /* the operation: */
        !          4063: #if (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          4064:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, scalbnf(tme_ieee754_extended80_value_builtin_get(src0), tme_ieee754_extended80_value_builtin_get(src1)));
        !          4065: #else  /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          4066:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, scalbn(tme_ieee754_extended80_value_builtin_get(src0), tme_ieee754_extended80_value_builtin_get(src1)));
        !          4067: #endif /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          4068: 
        !          4069:   /* leave native floating-point operation: */
        !          4070:   exceptions |= tme_float_leave();
        !          4071:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          4072: 
        !          4073:   /* signal any exceptions: */
        !          4074:   if (exceptions != 0) {
        !          4075:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          4076:   }
        !          4077: }
        !          4078: 
        !          4079: #endif /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80) */
        !          4080: 
        !          4081: #if (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)
        !          4082: 
        !          4083: /* this does a partial compliance extended80-precision pow: */
        !          4084: static void
        !          4085: _tme_ieee754_partial_extended80_pow(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          4086: {
        !          4087:   int exceptions;
        !          4088: 
        !          4089:   /* check for a NaN operand: */
        !          4090:   if (__tme_predict_false(tme_ieee754_extended80_check_nan_dyadic(ieee754_ctl, src0, src1, dst))) {
        !          4091:     return;
        !          4092:   }
        !          4093: 
        !          4094:   /* enter native floating-point operation: */
        !          4095:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          4096:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          4097: 
        !          4098:   /* assume that this operation raises no exceptions: */
        !          4099:   exceptions = 0;
        !          4100: 
        !          4101:   /* the operation: */
        !          4102: #if (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          4103:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, powf(tme_ieee754_extended80_value_builtin_get(src0), tme_ieee754_extended80_value_builtin_get(src1)));
        !          4104: #else  /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          4105:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, pow(tme_ieee754_extended80_value_builtin_get(src0), tme_ieee754_extended80_value_builtin_get(src1)));
        !          4106: #endif /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          4107: 
        !          4108:   /* leave native floating-point operation: */
        !          4109:   exceptions |= tme_float_leave();
        !          4110:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          4111: 
        !          4112:   /* signal any exceptions: */
        !          4113:   if (exceptions != 0) {
        !          4114:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          4115:   }
        !          4116: }
        !          4117: 
        !          4118: #endif /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80) */
        !          4119: 
        !          4120: #if (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)
        !          4121: 
        !          4122: /* this does a partial compliance quad-precision add: */
        !          4123: static void
        !          4124: _tme_ieee754_partial_quad_add(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          4125: {
        !          4126:   int exceptions;
        !          4127: 
        !          4128:   /* check for a NaN operand: */
        !          4129:   if (__tme_predict_false(tme_ieee754_quad_check_nan_dyadic(ieee754_ctl, src0, src1, dst))) {
        !          4130:     return;
        !          4131:   }
        !          4132: 
        !          4133:   /* enter native floating-point operation: */
        !          4134:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          4135:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          4136: 
        !          4137:   /* assume that this operation raises no exceptions: */
        !          4138:   exceptions = 0;
        !          4139: 
        !          4140:   /* the operation: */
        !          4141:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN, tme_ieee754_quad_value_builtin_get(src0) + tme_ieee754_quad_value_builtin_get(src1));
        !          4142: 
        !          4143:   /* leave native floating-point operation: */
        !          4144:   exceptions |= tme_float_leave();
        !          4145:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          4146: 
        !          4147:   /* signal any exceptions: */
        !          4148:   if (exceptions != 0) {
        !          4149:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          4150:   }
        !          4151: }
        !          4152: 
        !          4153: #endif /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD) */
        !          4154: 
        !          4155: #if (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)
        !          4156: 
        !          4157: /* this does a partial compliance quad-precision sub: */
        !          4158: static void
        !          4159: _tme_ieee754_partial_quad_sub(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          4160: {
        !          4161:   int exceptions;
        !          4162: 
        !          4163:   /* check for a NaN operand: */
        !          4164:   if (__tme_predict_false(tme_ieee754_quad_check_nan_dyadic(ieee754_ctl, src0, src1, dst))) {
        !          4165:     return;
        !          4166:   }
        !          4167: 
        !          4168:   /* enter native floating-point operation: */
        !          4169:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          4170:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          4171: 
        !          4172:   /* assume that this operation raises no exceptions: */
        !          4173:   exceptions = 0;
        !          4174: 
        !          4175:   /* the operation: */
        !          4176:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN, tme_ieee754_quad_value_builtin_get(src0) - tme_ieee754_quad_value_builtin_get(src1));
        !          4177: 
        !          4178:   /* leave native floating-point operation: */
        !          4179:   exceptions |= tme_float_leave();
        !          4180:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          4181: 
        !          4182:   /* signal any exceptions: */
        !          4183:   if (exceptions != 0) {
        !          4184:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          4185:   }
        !          4186: }
        !          4187: 
        !          4188: #endif /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD) */
        !          4189: 
        !          4190: #if (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)
        !          4191: 
        !          4192: /* this does a partial compliance quad-precision mul: */
        !          4193: static void
        !          4194: _tme_ieee754_partial_quad_mul(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          4195: {
        !          4196:   int exceptions;
        !          4197: 
        !          4198:   /* check for a NaN operand: */
        !          4199:   if (__tme_predict_false(tme_ieee754_quad_check_nan_dyadic(ieee754_ctl, src0, src1, dst))) {
        !          4200:     return;
        !          4201:   }
        !          4202: 
        !          4203:   /* enter native floating-point operation: */
        !          4204:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          4205:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          4206: 
        !          4207:   /* assume that this operation raises no exceptions: */
        !          4208:   exceptions = 0;
        !          4209: 
        !          4210:   /* the operation: */
        !          4211:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN, tme_ieee754_quad_value_builtin_get(src0) * tme_ieee754_quad_value_builtin_get(src1));
        !          4212: 
        !          4213:   /* leave native floating-point operation: */
        !          4214:   exceptions |= tme_float_leave();
        !          4215:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          4216: 
        !          4217:   /* signal any exceptions: */
        !          4218:   if (exceptions != 0) {
        !          4219:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          4220:   }
        !          4221: }
        !          4222: 
        !          4223: #endif /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD) */
        !          4224: 
        !          4225: #if (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)
        !          4226: 
        !          4227: /* this does a partial compliance quad-precision div: */
        !          4228: static void
        !          4229: _tme_ieee754_partial_quad_div(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          4230: {
        !          4231:   int exceptions;
        !          4232: 
        !          4233:   /* check for a NaN operand: */
        !          4234:   if (__tme_predict_false(tme_ieee754_quad_check_nan_dyadic(ieee754_ctl, src0, src1, dst))) {
        !          4235:     return;
        !          4236:   }
        !          4237: 
        !          4238:   /* enter native floating-point operation: */
        !          4239:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          4240:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          4241: 
        !          4242:   /* assume that this operation raises no exceptions: */
        !          4243:   exceptions = 0;
        !          4244: 
        !          4245:   /* the operation: */
        !          4246:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN, tme_ieee754_quad_value_builtin_get(src0) / tme_ieee754_quad_value_builtin_get(src1));
        !          4247: 
        !          4248:   /* leave native floating-point operation: */
        !          4249:   exceptions |= tme_float_leave();
        !          4250:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          4251: 
        !          4252:   /* signal any exceptions: */
        !          4253:   if (exceptions != 0) {
        !          4254:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          4255:   }
        !          4256: }
        !          4257: 
        !          4258: #endif /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD) */
        !          4259: 
        !          4260: #if (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)
        !          4261: 
        !          4262: /* this does a partial compliance quad-precision sqrt: */
        !          4263: static void
        !          4264: _tme_ieee754_partial_quad_sqrt(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          4265: {
        !          4266:   int exceptions;
        !          4267: 
        !          4268:   /* check for a NaN operand: */
        !          4269:   if (__tme_predict_false(tme_ieee754_quad_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          4270:     return;
        !          4271:   }
        !          4272: 
        !          4273:   /* enter native floating-point operation: */
        !          4274:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          4275:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          4276: 
        !          4277:   /* assume that this operation raises no exceptions: */
        !          4278:   exceptions = 0;
        !          4279: 
        !          4280:   /* the operation: */
        !          4281: #if (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          4282:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, sqrtf(tme_ieee754_quad_value_builtin_get(src0)));
        !          4283: #else  /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          4284:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, sqrt(tme_ieee754_quad_value_builtin_get(src0)));
        !          4285: #endif /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          4286: 
        !          4287:   /* leave native floating-point operation: */
        !          4288:   exceptions |= tme_float_leave();
        !          4289:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          4290: 
        !          4291:   /* signal any exceptions: */
        !          4292:   if (exceptions != 0) {
        !          4293:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          4294:   }
        !          4295: }
        !          4296: 
        !          4297: #endif /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD) */
        !          4298: 
        !          4299: #if (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)
        !          4300: 
        !          4301: /* this does a partial compliance quad-precision abs: */
        !          4302: static void
        !          4303: _tme_ieee754_partial_quad_abs(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          4304: {
        !          4305:   int exceptions;
        !          4306: 
        !          4307:   /* check for a NaN operand: */
        !          4308:   if (__tme_predict_false(tme_ieee754_quad_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          4309:     return;
        !          4310:   }
        !          4311: 
        !          4312:   /* enter native floating-point operation: */
        !          4313:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          4314:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          4315: 
        !          4316:   /* assume that this operation raises no exceptions: */
        !          4317:   exceptions = 0;
        !          4318: 
        !          4319:   /* the operation: */
        !          4320: #if (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          4321:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, fabsf(tme_ieee754_quad_value_builtin_get(src0)));
        !          4322: #else  /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          4323:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, fabs(tme_ieee754_quad_value_builtin_get(src0)));
        !          4324: #endif /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          4325: 
        !          4326:   /* leave native floating-point operation: */
        !          4327:   exceptions |= tme_float_leave();
        !          4328:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          4329: 
        !          4330:   /* signal any exceptions: */
        !          4331:   if (exceptions != 0) {
        !          4332:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          4333:   }
        !          4334: }
        !          4335: 
        !          4336: #endif /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD) */
        !          4337: 
        !          4338: #if (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)
        !          4339: 
        !          4340: /* this does a partial compliance quad-precision neg: */
        !          4341: static void
        !          4342: _tme_ieee754_partial_quad_neg(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          4343: {
        !          4344:   int exceptions;
        !          4345: 
        !          4346:   /* check for a NaN operand: */
        !          4347:   if (__tme_predict_false(tme_ieee754_quad_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          4348:     return;
        !          4349:   }
        !          4350: 
        !          4351:   /* enter native floating-point operation: */
        !          4352:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          4353:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          4354: 
        !          4355:   /* assume that this operation raises no exceptions: */
        !          4356:   exceptions = 0;
        !          4357: 
        !          4358:   /* the operation: */
        !          4359:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN, 0 - tme_ieee754_quad_value_builtin_get(src0));
        !          4360: 
        !          4361:   /* leave native floating-point operation: */
        !          4362:   exceptions |= tme_float_leave();
        !          4363:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          4364: 
        !          4365:   /* signal any exceptions: */
        !          4366:   if (exceptions != 0) {
        !          4367:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          4368:   }
        !          4369: }
        !          4370: 
        !          4371: #endif /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD) */
        !          4372: 
        !          4373: #if (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)
        !          4374: 
        !          4375: /* this does a partial compliance quad-precision move: */
        !          4376: static void
        !          4377: _tme_ieee754_partial_quad_move(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          4378: {
        !          4379:   int exceptions;
        !          4380: 
        !          4381:   /* check for a NaN operand: */
        !          4382:   if (__tme_predict_false(tme_ieee754_quad_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          4383:     return;
        !          4384:   }
        !          4385: 
        !          4386:   /* enter native floating-point operation: */
        !          4387:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          4388:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          4389: 
        !          4390:   /* assume that this operation raises no exceptions: */
        !          4391:   exceptions = 0;
        !          4392: 
        !          4393:   /* the operation: */
        !          4394:   *dst = *src0;
        !          4395: 
        !          4396:   /* leave native floating-point operation: */
        !          4397:   exceptions |= tme_float_leave();
        !          4398:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          4399: 
        !          4400:   /* signal any exceptions: */
        !          4401:   if (exceptions != 0) {
        !          4402:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          4403:   }
        !          4404: }
        !          4405: 
        !          4406: #endif /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD) */
        !          4407: 
        !          4408: #if (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)
        !          4409: 
        !          4410: /* this does a partial compliance quad-precision exp: */
        !          4411: static void
        !          4412: _tme_ieee754_partial_quad_exp(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          4413: {
        !          4414:   int exceptions;
        !          4415: 
        !          4416:   /* check for a NaN operand: */
        !          4417:   if (__tme_predict_false(tme_ieee754_quad_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          4418:     return;
        !          4419:   }
        !          4420: 
        !          4421:   /* enter native floating-point operation: */
        !          4422:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          4423:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          4424: 
        !          4425:   /* assume that this operation raises no exceptions: */
        !          4426:   exceptions = 0;
        !          4427: 
        !          4428:   /* the operation: */
        !          4429: #if (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          4430:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, expf(tme_ieee754_quad_value_builtin_get(src0)));
        !          4431: #else  /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          4432:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, exp(tme_ieee754_quad_value_builtin_get(src0)));
        !          4433: #endif /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          4434: 
        !          4435:   /* leave native floating-point operation: */
        !          4436:   exceptions |= tme_float_leave();
        !          4437:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          4438: 
        !          4439:   /* signal any exceptions: */
        !          4440:   if (exceptions != 0) {
        !          4441:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          4442:   }
        !          4443: }
        !          4444: 
        !          4445: #endif /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD) */
        !          4446: 
        !          4447: #if (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)
        !          4448: 
        !          4449: /* this does a partial compliance quad-precision log10: */
        !          4450: static void
        !          4451: _tme_ieee754_partial_quad_log10(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          4452: {
        !          4453:   int exceptions;
        !          4454: 
        !          4455:   /* check for a NaN operand: */
        !          4456:   if (__tme_predict_false(tme_ieee754_quad_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          4457:     return;
        !          4458:   }
        !          4459: 
        !          4460:   /* enter native floating-point operation: */
        !          4461:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          4462:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          4463: 
        !          4464:   /* assume that this operation raises no exceptions: */
        !          4465:   exceptions = 0;
        !          4466: 
        !          4467:   /* the operation: */
        !          4468: #if (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          4469:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, log10f(tme_ieee754_quad_value_builtin_get(src0)));
        !          4470: #else  /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          4471:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, log10(tme_ieee754_quad_value_builtin_get(src0)));
        !          4472: #endif /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          4473: 
        !          4474:   /* leave native floating-point operation: */
        !          4475:   exceptions |= tme_float_leave();
        !          4476:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          4477: 
        !          4478:   /* signal any exceptions: */
        !          4479:   if (exceptions != 0) {
        !          4480:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          4481:   }
        !          4482: }
        !          4483: 
        !          4484: #endif /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD) */
        !          4485: 
        !          4486: #if (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)
        !          4487: 
        !          4488: /* this does a partial compliance quad-precision log: */
        !          4489: static void
        !          4490: _tme_ieee754_partial_quad_log(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          4491: {
        !          4492:   int exceptions;
        !          4493: 
        !          4494:   /* check for a NaN operand: */
        !          4495:   if (__tme_predict_false(tme_ieee754_quad_check_nan_monadic(ieee754_ctl, src0, dst))) {
        !          4496:     return;
        !          4497:   }
        !          4498: 
        !          4499:   /* enter native floating-point operation: */
        !          4500:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          4501:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          4502: 
        !          4503:   /* assume that this operation raises no exceptions: */
        !          4504:   exceptions = 0;
        !          4505: 
        !          4506:   /* the operation: */
        !          4507: #if (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          4508:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, logf(tme_ieee754_quad_value_builtin_get(src0)));
        !          4509: #else  /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          4510:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, log(tme_ieee754_quad_value_builtin_get(src0)));
        !          4511: #endif /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          4512: 
        !          4513:   /* leave native floating-point operation: */
        !          4514:   exceptions |= tme_float_leave();
        !          4515:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          4516: 
        !          4517:   /* signal any exceptions: */
        !          4518:   if (exceptions != 0) {
        !          4519:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          4520:   }
        !          4521: }
        !          4522: 
        !          4523: #endif /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD) */
        !          4524: 
        !          4525: #if (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)
        !          4526: 
        !          4527: /* this does a partial compliance quad-precision scale: */
        !          4528: static void
        !          4529: _tme_ieee754_partial_quad_scale(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          4530: {
        !          4531:   int exceptions;
        !          4532: 
        !          4533:   /* check for a NaN operand: */
        !          4534:   if (__tme_predict_false(tme_ieee754_quad_check_nan_dyadic(ieee754_ctl, src0, src1, dst))) {
        !          4535:     return;
        !          4536:   }
        !          4537: 
        !          4538:   /* enter native floating-point operation: */
        !          4539:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          4540:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          4541: 
        !          4542:   /* assume that this operation raises no exceptions: */
        !          4543:   exceptions = 0;
        !          4544: 
        !          4545:   /* the operation: */
        !          4546: #if (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          4547:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, scalbnf(tme_ieee754_quad_value_builtin_get(src0), tme_ieee754_quad_value_builtin_get(src1)));
        !          4548: #else  /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          4549:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, scalbn(tme_ieee754_quad_value_builtin_get(src0), tme_ieee754_quad_value_builtin_get(src1)));
        !          4550: #endif /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          4551: 
        !          4552:   /* leave native floating-point operation: */
        !          4553:   exceptions |= tme_float_leave();
        !          4554:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          4555: 
        !          4556:   /* signal any exceptions: */
        !          4557:   if (exceptions != 0) {
        !          4558:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          4559:   }
        !          4560: }
        !          4561: 
        !          4562: #endif /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD) */
        !          4563: 
        !          4564: #if (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)
        !          4565: 
        !          4566: /* this does a partial compliance quad-precision pow: */
        !          4567: static void
        !          4568: _tme_ieee754_partial_quad_pow(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          4569: {
        !          4570:   int exceptions;
        !          4571: 
        !          4572:   /* check for a NaN operand: */
        !          4573:   if (__tme_predict_false(tme_ieee754_quad_check_nan_dyadic(ieee754_ctl, src0, src1, dst))) {
        !          4574:     return;
        !          4575:   }
        !          4576: 
        !          4577:   /* enter native floating-point operation: */
        !          4578:   tme_float_enter(ieee754_ctl->tme_ieee754_ctl_rounding_mode, tme_ieee754_exception_float, ieee754_ctl);
        !          4579:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = tme_float_leave;
        !          4580: 
        !          4581:   /* assume that this operation raises no exceptions: */
        !          4582:   exceptions = 0;
        !          4583: 
        !          4584:   /* the operation: */
        !          4585: #if (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          4586:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, powf(tme_ieee754_quad_value_builtin_get(src0), tme_ieee754_quad_value_builtin_get(src1)));
        !          4587: #else  /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          4588:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, pow(tme_ieee754_quad_value_builtin_get(src0), tme_ieee754_quad_value_builtin_get(src1)));
        !          4589: #endif /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          4590: 
        !          4591:   /* leave native floating-point operation: */
        !          4592:   exceptions |= tme_float_leave();
        !          4593:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          4594: 
        !          4595:   /* signal any exceptions: */
        !          4596:   if (exceptions != 0) {
        !          4597:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          4598:   }
        !          4599: }
        !          4600: 
        !          4601: #endif /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD) */
        !          4602: 
        !          4603: /* the partial compliance operations: */
        !          4604: _tme_const struct tme_ieee754_ops tme_ieee754_ops_partial = {
        !          4605: 
        !          4606:   /* the version of this structure: */
        !          4607:   TME_X_VERSION(0, 0),
        !          4608: 
        !          4609:   /* this does a partial compliance single-precision add: */
        !          4610: #if ((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE))
        !          4611:   _tme_ieee754_partial_single_add,
        !          4612: #else  /* !((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)) */
        !          4613:   _tme_ieee754_strict_single_add,
        !          4614: #endif /* !((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)) */
        !          4615: 
        !          4616:   /* this does a partial compliance single-precision sub: */
        !          4617: #if ((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE))
        !          4618:   _tme_ieee754_partial_single_sub,
        !          4619: #else  /* !((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)) */
        !          4620:   _tme_ieee754_strict_single_sub,
        !          4621: #endif /* !((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)) */
        !          4622: 
        !          4623:   /* this does a partial compliance single-precision mul: */
        !          4624: #if ((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE))
        !          4625:   _tme_ieee754_partial_single_mul,
        !          4626: #else  /* !((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)) */
        !          4627:   _tme_ieee754_strict_single_mul,
        !          4628: #endif /* !((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)) */
        !          4629: 
        !          4630:   /* this does a partial compliance single-precision div: */
        !          4631: #if ((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE))
        !          4632:   _tme_ieee754_partial_single_div,
        !          4633: #else  /* !((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)) */
        !          4634:   _tme_ieee754_strict_single_div,
        !          4635: #endif /* !((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)) */
        !          4636: 
        !          4637:   /* this does a partial compliance single-precision rem: */
        !          4638:   _tme_ieee754_strict_single_rem,
        !          4639: 
        !          4640:   /* this does a partial compliance single-precision sqrt: */
        !          4641: #if ((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE))
        !          4642:   _tme_ieee754_partial_single_sqrt,
        !          4643: #else  /* !((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)) */
        !          4644:   _tme_ieee754_strict_single_sqrt,
        !          4645: #endif /* !((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)) */
        !          4646: 
        !          4647:   /* this does a partial compliance single-precision abs: */
        !          4648: #if ((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE))
        !          4649:   _tme_ieee754_partial_single_abs,
        !          4650: #else  /* !((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)) */
        !          4651:   NULL,
        !          4652: #endif /* !((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)) */
        !          4653: 
        !          4654:   /* this does a partial compliance single-precision neg: */
        !          4655: #if ((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE))
        !          4656:   _tme_ieee754_partial_single_neg,
        !          4657: #else  /* !((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)) */
        !          4658:   _tme_ieee754_strict_single_neg,
        !          4659: #endif /* !((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)) */
        !          4660: 
        !          4661:   /* this does a partial compliance single-precision move: */
        !          4662: #if ((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE))
        !          4663:   _tme_ieee754_partial_single_move,
        !          4664: #else  /* !((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)) */
        !          4665:   _tme_ieee754_strict_single_move,
        !          4666: #endif /* !((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)) */
        !          4667: 
        !          4668:   /* this does a partial compliance single-precision rint: */
        !          4669:   _tme_ieee754_strict_single_rint,
        !          4670: 
        !          4671:   /* this does a partial compliance single-precision cos: */
        !          4672:   NULL,
        !          4673: 
        !          4674:   /* this does a partial compliance single-precision acos: */
        !          4675:   NULL,
        !          4676: 
        !          4677:   /* this does a partial compliance single-precision cosh: */
        !          4678:   NULL,
        !          4679: 
        !          4680:   /* this does a partial compliance single-precision sin: */
        !          4681:   NULL,
        !          4682: 
        !          4683:   /* this does a partial compliance single-precision asin: */
        !          4684:   NULL,
        !          4685: 
        !          4686:   /* this does a partial compliance single-precision sinh: */
        !          4687:   NULL,
        !          4688: 
        !          4689:   /* this does a partial compliance single-precision tan: */
        !          4690:   NULL,
        !          4691: 
        !          4692:   /* this does a partial compliance single-precision atan: */
        !          4693:   NULL,
        !          4694: 
        !          4695:   /* this does a partial compliance single-precision tanh: */
        !          4696:   NULL,
        !          4697: 
        !          4698:   /* this does a partial compliance single-precision atanh: */
        !          4699:   NULL,
        !          4700: 
        !          4701:   /* this does a partial compliance single-precision exp: */
        !          4702: #if ((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE))
        !          4703:   _tme_ieee754_partial_single_exp,
        !          4704: #else  /* !((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)) */
        !          4705:   NULL,
        !          4706: #endif /* !((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)) */
        !          4707: 
        !          4708:   /* this does a partial compliance single-precision expm1: */
        !          4709:   NULL,
        !          4710: 
        !          4711:   /* this does a partial compliance single-precision log10: */
        !          4712: #if ((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE))
        !          4713:   _tme_ieee754_partial_single_log10,
        !          4714: #else  /* !((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)) */
        !          4715:   NULL,
        !          4716: #endif /* !((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)) */
        !          4717: 
        !          4718:   /* this does a partial compliance single-precision log: */
        !          4719: #if ((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE))
        !          4720:   _tme_ieee754_partial_single_log,
        !          4721: #else  /* !((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)) */
        !          4722:   NULL,
        !          4723: #endif /* !((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)) */
        !          4724: 
        !          4725:   /* this does a partial compliance single-precision log1p: */
        !          4726:   NULL,
        !          4727: 
        !          4728:   /* this does a partial compliance single-precision getexp: */
        !          4729:   _tme_ieee754_strict_single_getexp,
        !          4730: 
        !          4731:   /* this does a partial compliance single-precision getman: */
        !          4732:   _tme_ieee754_strict_single_getman,
        !          4733: 
        !          4734:   /* this does a partial compliance single-precision scale: */
        !          4735: #if ((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE))
        !          4736:   _tme_ieee754_partial_single_scale,
        !          4737: #else  /* !((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)) */
        !          4738:   NULL,
        !          4739: #endif /* !((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)) */
        !          4740: 
        !          4741:   /* this does a partial compliance single-precision pow: */
        !          4742: #if ((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE))
        !          4743:   _tme_ieee754_partial_single_pow,
        !          4744: #else  /* !((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)) */
        !          4745:   NULL,
        !          4746: #endif /* !((TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_SINGLE)) */
        !          4747: 
        !          4748:   /* this does a partial compliance single-precision from_double: */
        !          4749:   _tme_ieee754_strict_single_from_double,
        !          4750: 
        !          4751:   /* this does a partial compliance single-precision from_extended80: */
        !          4752:   _tme_ieee754_strict_single_from_extended80,
        !          4753: 
        !          4754:   /* this does a partial compliance single-precision from_quad: */
        !          4755:   _tme_ieee754_strict_single_from_quad,
        !          4756: 
        !          4757:   /* this does a partial compliance single-precision to_int32: */
        !          4758:   _tme_ieee754_strict_single_to_int32,
        !          4759: 
        !          4760:   /* this does a partial compliance single-precision to_int64: */
        !          4761:   NULL,
        !          4762: 
        !          4763:   /* this does a partial compliance double-precision add: */
        !          4764: #if ((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE))
        !          4765:   _tme_ieee754_partial_double_add,
        !          4766: #else  /* !((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)) */
        !          4767:   _tme_ieee754_strict_double_add,
        !          4768: #endif /* !((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)) */
        !          4769: 
        !          4770:   /* this does a partial compliance double-precision sub: */
        !          4771: #if ((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE))
        !          4772:   _tme_ieee754_partial_double_sub,
        !          4773: #else  /* !((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)) */
        !          4774:   _tme_ieee754_strict_double_sub,
        !          4775: #endif /* !((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)) */
        !          4776: 
        !          4777:   /* this does a partial compliance double-precision mul: */
        !          4778: #if ((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE))
        !          4779:   _tme_ieee754_partial_double_mul,
        !          4780: #else  /* !((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)) */
        !          4781:   _tme_ieee754_strict_double_mul,
        !          4782: #endif /* !((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)) */
        !          4783: 
        !          4784:   /* this does a partial compliance double-precision div: */
        !          4785: #if ((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE))
        !          4786:   _tme_ieee754_partial_double_div,
        !          4787: #else  /* !((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)) */
        !          4788:   _tme_ieee754_strict_double_div,
        !          4789: #endif /* !((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)) */
        !          4790: 
        !          4791:   /* this does a partial compliance double-precision rem: */
        !          4792:   _tme_ieee754_strict_double_rem,
        !          4793: 
        !          4794:   /* this does a partial compliance double-precision sqrt: */
        !          4795: #if ((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE))
        !          4796:   _tme_ieee754_partial_double_sqrt,
        !          4797: #else  /* !((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)) */
        !          4798:   _tme_ieee754_strict_double_sqrt,
        !          4799: #endif /* !((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)) */
        !          4800: 
        !          4801:   /* this does a partial compliance double-precision abs: */
        !          4802: #if ((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE))
        !          4803:   _tme_ieee754_partial_double_abs,
        !          4804: #else  /* !((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)) */
        !          4805:   NULL,
        !          4806: #endif /* !((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)) */
        !          4807: 
        !          4808:   /* this does a partial compliance double-precision neg: */
        !          4809: #if ((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE))
        !          4810:   _tme_ieee754_partial_double_neg,
        !          4811: #else  /* !((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)) */
        !          4812:   _tme_ieee754_strict_double_neg,
        !          4813: #endif /* !((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)) */
        !          4814: 
        !          4815:   /* this does a partial compliance double-precision move: */
        !          4816: #if ((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE))
        !          4817:   _tme_ieee754_partial_double_move,
        !          4818: #else  /* !((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)) */
        !          4819:   _tme_ieee754_strict_double_move,
        !          4820: #endif /* !((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)) */
        !          4821: 
        !          4822:   /* this does a partial compliance double-precision rint: */
        !          4823:   _tme_ieee754_strict_double_rint,
        !          4824: 
        !          4825:   /* this does a partial compliance double-precision cos: */
        !          4826:   NULL,
        !          4827: 
        !          4828:   /* this does a partial compliance double-precision acos: */
        !          4829:   NULL,
        !          4830: 
        !          4831:   /* this does a partial compliance double-precision cosh: */
        !          4832:   NULL,
        !          4833: 
        !          4834:   /* this does a partial compliance double-precision sin: */
        !          4835:   NULL,
        !          4836: 
        !          4837:   /* this does a partial compliance double-precision asin: */
        !          4838:   NULL,
        !          4839: 
        !          4840:   /* this does a partial compliance double-precision sinh: */
        !          4841:   NULL,
        !          4842: 
        !          4843:   /* this does a partial compliance double-precision tan: */
        !          4844:   NULL,
        !          4845: 
        !          4846:   /* this does a partial compliance double-precision atan: */
        !          4847:   NULL,
        !          4848: 
        !          4849:   /* this does a partial compliance double-precision tanh: */
        !          4850:   NULL,
        !          4851: 
        !          4852:   /* this does a partial compliance double-precision atanh: */
        !          4853:   NULL,
        !          4854: 
        !          4855:   /* this does a partial compliance double-precision exp: */
        !          4856: #if ((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE))
        !          4857:   _tme_ieee754_partial_double_exp,
        !          4858: #else  /* !((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)) */
        !          4859:   NULL,
        !          4860: #endif /* !((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)) */
        !          4861: 
        !          4862:   /* this does a partial compliance double-precision expm1: */
        !          4863:   NULL,
        !          4864: 
        !          4865:   /* this does a partial compliance double-precision log10: */
        !          4866: #if ((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE))
        !          4867:   _tme_ieee754_partial_double_log10,
        !          4868: #else  /* !((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)) */
        !          4869:   NULL,
        !          4870: #endif /* !((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)) */
        !          4871: 
        !          4872:   /* this does a partial compliance double-precision log: */
        !          4873: #if ((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE))
        !          4874:   _tme_ieee754_partial_double_log,
        !          4875: #else  /* !((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)) */
        !          4876:   NULL,
        !          4877: #endif /* !((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)) */
        !          4878: 
        !          4879:   /* this does a partial compliance double-precision log1p: */
        !          4880:   NULL,
        !          4881: 
        !          4882:   /* this does a partial compliance double-precision getexp: */
        !          4883:   _tme_ieee754_strict_double_getexp,
        !          4884: 
        !          4885:   /* this does a partial compliance double-precision getman: */
        !          4886:   _tme_ieee754_strict_double_getman,
        !          4887: 
        !          4888:   /* this does a partial compliance double-precision scale: */
        !          4889: #if ((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE))
        !          4890:   _tme_ieee754_partial_double_scale,
        !          4891: #else  /* !((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)) */
        !          4892:   NULL,
        !          4893: #endif /* !((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)) */
        !          4894: 
        !          4895:   /* this does a partial compliance double-precision pow: */
        !          4896: #if ((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE))
        !          4897:   _tme_ieee754_partial_double_pow,
        !          4898: #else  /* !((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)) */
        !          4899:   NULL,
        !          4900: #endif /* !((TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_IEEE754_DOUBLE)) */
        !          4901: 
        !          4902:   /* this does a partial compliance double-precision from_single: */
        !          4903:   _tme_ieee754_strict_double_from_single,
        !          4904: 
        !          4905:   /* this does a partial compliance double-precision from_extended80: */
        !          4906:   _tme_ieee754_strict_double_from_extended80,
        !          4907: 
        !          4908:   /* this does a partial compliance double-precision from_quad: */
        !          4909:   _tme_ieee754_strict_double_from_quad,
        !          4910: 
        !          4911:   /* this does a partial compliance double-precision to_int32: */
        !          4912:   _tme_ieee754_strict_double_to_int32,
        !          4913: 
        !          4914:   /* this does a partial compliance double-precision to_int64: */
        !          4915:   NULL,
        !          4916: 
        !          4917:   /* this does a partial compliance extended80-precision add: */
        !          4918: #if ((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80))
        !          4919:   _tme_ieee754_partial_extended80_add,
        !          4920: #else  /* !((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)) */
        !          4921: #if (defined(TME_HAVE_INT64_T))
        !          4922:   _tme_ieee754_strict_extended80_add,
        !          4923: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          4924:   NULL,
        !          4925: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          4926: #endif /* !((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)) */
        !          4927: 
        !          4928:   /* this does a partial compliance extended80-precision sub: */
        !          4929: #if ((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80))
        !          4930:   _tme_ieee754_partial_extended80_sub,
        !          4931: #else  /* !((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)) */
        !          4932: #if (defined(TME_HAVE_INT64_T))
        !          4933:   _tme_ieee754_strict_extended80_sub,
        !          4934: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          4935:   NULL,
        !          4936: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          4937: #endif /* !((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)) */
        !          4938: 
        !          4939:   /* this does a partial compliance extended80-precision mul: */
        !          4940: #if ((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80))
        !          4941:   _tme_ieee754_partial_extended80_mul,
        !          4942: #else  /* !((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)) */
        !          4943: #if (defined(TME_HAVE_INT64_T))
        !          4944:   _tme_ieee754_strict_extended80_mul,
        !          4945: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          4946:   NULL,
        !          4947: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          4948: #endif /* !((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)) */
        !          4949: 
        !          4950:   /* this does a partial compliance extended80-precision div: */
        !          4951: #if ((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80))
        !          4952:   _tme_ieee754_partial_extended80_div,
        !          4953: #else  /* !((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)) */
        !          4954: #if (defined(TME_HAVE_INT64_T))
        !          4955:   _tme_ieee754_strict_extended80_div,
        !          4956: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          4957:   NULL,
        !          4958: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          4959: #endif /* !((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)) */
        !          4960: 
        !          4961:   /* this does a partial compliance extended80-precision rem: */
        !          4962: #if (defined(TME_HAVE_INT64_T))
        !          4963:   _tme_ieee754_strict_extended80_rem,
        !          4964: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          4965:   NULL,
        !          4966: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          4967: 
        !          4968:   /* this does a partial compliance extended80-precision sqrt: */
        !          4969: #if ((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80))
        !          4970:   _tme_ieee754_partial_extended80_sqrt,
        !          4971: #else  /* !((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)) */
        !          4972: #if (defined(TME_HAVE_INT64_T))
        !          4973:   _tme_ieee754_strict_extended80_sqrt,
        !          4974: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          4975:   NULL,
        !          4976: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          4977: #endif /* !((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)) */
        !          4978: 
        !          4979:   /* this does a partial compliance extended80-precision abs: */
        !          4980: #if ((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80))
        !          4981:   _tme_ieee754_partial_extended80_abs,
        !          4982: #else  /* !((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)) */
        !          4983:   NULL,
        !          4984: #endif /* !((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)) */
        !          4985: 
        !          4986:   /* this does a partial compliance extended80-precision neg: */
        !          4987: #if ((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80))
        !          4988:   _tme_ieee754_partial_extended80_neg,
        !          4989: #else  /* !((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)) */
        !          4990: #if (defined(TME_HAVE_INT64_T))
        !          4991:   _tme_ieee754_strict_extended80_neg,
        !          4992: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          4993:   NULL,
        !          4994: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          4995: #endif /* !((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)) */
        !          4996: 
        !          4997:   /* this does a partial compliance extended80-precision move: */
        !          4998: #if ((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80))
        !          4999:   _tme_ieee754_partial_extended80_move,
        !          5000: #else  /* !((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)) */
        !          5001: #if (defined(TME_HAVE_INT64_T))
        !          5002:   _tme_ieee754_strict_extended80_move,
        !          5003: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          5004:   NULL,
        !          5005: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          5006: #endif /* !((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)) */
        !          5007: 
        !          5008:   /* this does a partial compliance extended80-precision rint: */
        !          5009: #if (defined(TME_HAVE_INT64_T))
        !          5010:   _tme_ieee754_strict_extended80_rint,
        !          5011: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          5012:   NULL,
        !          5013: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          5014: 
        !          5015:   /* this does a partial compliance extended80-precision cos: */
        !          5016:   NULL,
        !          5017: 
        !          5018:   /* this does a partial compliance extended80-precision acos: */
        !          5019:   NULL,
        !          5020: 
        !          5021:   /* this does a partial compliance extended80-precision cosh: */
        !          5022:   NULL,
        !          5023: 
        !          5024:   /* this does a partial compliance extended80-precision sin: */
        !          5025:   NULL,
        !          5026: 
        !          5027:   /* this does a partial compliance extended80-precision asin: */
        !          5028:   NULL,
        !          5029: 
        !          5030:   /* this does a partial compliance extended80-precision sinh: */
        !          5031:   NULL,
        !          5032: 
        !          5033:   /* this does a partial compliance extended80-precision tan: */
        !          5034:   NULL,
        !          5035: 
        !          5036:   /* this does a partial compliance extended80-precision atan: */
        !          5037:   NULL,
        !          5038: 
        !          5039:   /* this does a partial compliance extended80-precision tanh: */
        !          5040:   NULL,
        !          5041: 
        !          5042:   /* this does a partial compliance extended80-precision atanh: */
        !          5043:   NULL,
        !          5044: 
        !          5045:   /* this does a partial compliance extended80-precision exp: */
        !          5046: #if ((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80))
        !          5047:   _tme_ieee754_partial_extended80_exp,
        !          5048: #else  /* !((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)) */
        !          5049:   NULL,
        !          5050: #endif /* !((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)) */
        !          5051: 
        !          5052:   /* this does a partial compliance extended80-precision expm1: */
        !          5053:   NULL,
        !          5054: 
        !          5055:   /* this does a partial compliance extended80-precision log10: */
        !          5056: #if ((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80))
        !          5057:   _tme_ieee754_partial_extended80_log10,
        !          5058: #else  /* !((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)) */
        !          5059:   NULL,
        !          5060: #endif /* !((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)) */
        !          5061: 
        !          5062:   /* this does a partial compliance extended80-precision log: */
        !          5063: #if ((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80))
        !          5064:   _tme_ieee754_partial_extended80_log,
        !          5065: #else  /* !((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)) */
        !          5066:   NULL,
        !          5067: #endif /* !((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)) */
        !          5068: 
        !          5069:   /* this does a partial compliance extended80-precision log1p: */
        !          5070:   NULL,
        !          5071: 
        !          5072:   /* this does a partial compliance extended80-precision getexp: */
        !          5073:   _tme_ieee754_strict_extended80_getexp,
        !          5074: 
        !          5075:   /* this does a partial compliance extended80-precision getman: */
        !          5076:   _tme_ieee754_strict_extended80_getman,
        !          5077: 
        !          5078:   /* this does a partial compliance extended80-precision scale: */
        !          5079: #if ((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80))
        !          5080:   _tme_ieee754_partial_extended80_scale,
        !          5081: #else  /* !((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)) */
        !          5082:   NULL,
        !          5083: #endif /* !((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)) */
        !          5084: 
        !          5085:   /* this does a partial compliance extended80-precision pow: */
        !          5086: #if ((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80))
        !          5087:   _tme_ieee754_partial_extended80_pow,
        !          5088: #else  /* !((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)) */
        !          5089:   NULL,
        !          5090: #endif /* !((TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_IEEE754_EXTENDED80)) */
        !          5091: 
        !          5092:   /* this does a partial compliance extended80-precision from_single: */
        !          5093: #if (defined(TME_HAVE_INT64_T))
        !          5094:   _tme_ieee754_strict_extended80_from_single,
        !          5095: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          5096:   NULL,
        !          5097: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          5098: 
        !          5099:   /* this does a partial compliance extended80-precision from_double: */
        !          5100: #if (defined(TME_HAVE_INT64_T))
        !          5101:   _tme_ieee754_strict_extended80_from_double,
        !          5102: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          5103:   NULL,
        !          5104: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          5105: 
        !          5106:   /* this does a partial compliance extended80-precision from_quad: */
        !          5107: #if (defined(TME_HAVE_INT64_T))
        !          5108:   _tme_ieee754_strict_extended80_from_quad,
        !          5109: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          5110:   NULL,
        !          5111: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          5112: 
        !          5113:   /* this does a partial compliance extended80-precision to_int32: */
        !          5114:   _tme_ieee754_strict_extended80_to_int32,
        !          5115: 
        !          5116:   /* this does a partial compliance extended80-precision to_int64: */
        !          5117:   NULL,
        !          5118: 
        !          5119:   /* this does a partial compliance quad-precision add: */
        !          5120: #if ((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD))
        !          5121:   _tme_ieee754_partial_quad_add,
        !          5122: #else  /* !((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)) */
        !          5123: #if (defined(TME_HAVE_INT64_T))
        !          5124:   _tme_ieee754_strict_quad_add,
        !          5125: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          5126:   NULL,
        !          5127: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          5128: #endif /* !((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)) */
        !          5129: 
        !          5130:   /* this does a partial compliance quad-precision sub: */
        !          5131: #if ((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD))
        !          5132:   _tme_ieee754_partial_quad_sub,
        !          5133: #else  /* !((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)) */
        !          5134: #if (defined(TME_HAVE_INT64_T))
        !          5135:   _tme_ieee754_strict_quad_sub,
        !          5136: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          5137:   NULL,
        !          5138: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          5139: #endif /* !((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)) */
        !          5140: 
        !          5141:   /* this does a partial compliance quad-precision mul: */
        !          5142: #if ((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD))
        !          5143:   _tme_ieee754_partial_quad_mul,
        !          5144: #else  /* !((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)) */
        !          5145: #if (defined(TME_HAVE_INT64_T))
        !          5146:   _tme_ieee754_strict_quad_mul,
        !          5147: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          5148:   NULL,
        !          5149: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          5150: #endif /* !((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)) */
        !          5151: 
        !          5152:   /* this does a partial compliance quad-precision div: */
        !          5153: #if ((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD))
        !          5154:   _tme_ieee754_partial_quad_div,
        !          5155: #else  /* !((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)) */
        !          5156: #if (defined(TME_HAVE_INT64_T))
        !          5157:   _tme_ieee754_strict_quad_div,
        !          5158: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          5159:   NULL,
        !          5160: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          5161: #endif /* !((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)) */
        !          5162: 
        !          5163:   /* this does a partial compliance quad-precision rem: */
        !          5164: #if (defined(TME_HAVE_INT64_T))
        !          5165:   _tme_ieee754_strict_quad_rem,
        !          5166: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          5167:   NULL,
        !          5168: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          5169: 
        !          5170:   /* this does a partial compliance quad-precision sqrt: */
        !          5171: #if ((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD))
        !          5172:   _tme_ieee754_partial_quad_sqrt,
        !          5173: #else  /* !((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)) */
        !          5174: #if (defined(TME_HAVE_INT64_T))
        !          5175:   _tme_ieee754_strict_quad_sqrt,
        !          5176: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          5177:   NULL,
        !          5178: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          5179: #endif /* !((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)) */
        !          5180: 
        !          5181:   /* this does a partial compliance quad-precision abs: */
        !          5182: #if ((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD))
        !          5183:   _tme_ieee754_partial_quad_abs,
        !          5184: #else  /* !((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)) */
        !          5185:   NULL,
        !          5186: #endif /* !((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)) */
        !          5187: 
        !          5188:   /* this does a partial compliance quad-precision neg: */
        !          5189: #if ((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD))
        !          5190:   _tme_ieee754_partial_quad_neg,
        !          5191: #else  /* !((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)) */
        !          5192: #if (defined(TME_HAVE_INT64_T))
        !          5193:   _tme_ieee754_strict_quad_neg,
        !          5194: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          5195:   NULL,
        !          5196: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          5197: #endif /* !((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)) */
        !          5198: 
        !          5199:   /* this does a partial compliance quad-precision move: */
        !          5200: #if ((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD))
        !          5201:   _tme_ieee754_partial_quad_move,
        !          5202: #else  /* !((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)) */
        !          5203: #if (defined(TME_HAVE_INT64_T))
        !          5204:   _tme_ieee754_strict_quad_move,
        !          5205: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          5206:   NULL,
        !          5207: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          5208: #endif /* !((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)) */
        !          5209: 
        !          5210:   /* this does a partial compliance quad-precision rint: */
        !          5211: #if (defined(TME_HAVE_INT64_T))
        !          5212:   _tme_ieee754_strict_quad_rint,
        !          5213: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          5214:   NULL,
        !          5215: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          5216: 
        !          5217:   /* this does a partial compliance quad-precision cos: */
        !          5218:   NULL,
        !          5219: 
        !          5220:   /* this does a partial compliance quad-precision acos: */
        !          5221:   NULL,
        !          5222: 
        !          5223:   /* this does a partial compliance quad-precision cosh: */
        !          5224:   NULL,
        !          5225: 
        !          5226:   /* this does a partial compliance quad-precision sin: */
        !          5227:   NULL,
        !          5228: 
        !          5229:   /* this does a partial compliance quad-precision asin: */
        !          5230:   NULL,
        !          5231: 
        !          5232:   /* this does a partial compliance quad-precision sinh: */
        !          5233:   NULL,
        !          5234: 
        !          5235:   /* this does a partial compliance quad-precision tan: */
        !          5236:   NULL,
        !          5237: 
        !          5238:   /* this does a partial compliance quad-precision atan: */
        !          5239:   NULL,
        !          5240: 
        !          5241:   /* this does a partial compliance quad-precision tanh: */
        !          5242:   NULL,
        !          5243: 
        !          5244:   /* this does a partial compliance quad-precision atanh: */
        !          5245:   NULL,
        !          5246: 
        !          5247:   /* this does a partial compliance quad-precision exp: */
        !          5248: #if ((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD))
        !          5249:   _tme_ieee754_partial_quad_exp,
        !          5250: #else  /* !((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)) */
        !          5251:   NULL,
        !          5252: #endif /* !((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)) */
        !          5253: 
        !          5254:   /* this does a partial compliance quad-precision expm1: */
        !          5255:   NULL,
        !          5256: 
        !          5257:   /* this does a partial compliance quad-precision log10: */
        !          5258: #if ((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD))
        !          5259:   _tme_ieee754_partial_quad_log10,
        !          5260: #else  /* !((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)) */
        !          5261:   NULL,
        !          5262: #endif /* !((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)) */
        !          5263: 
        !          5264:   /* this does a partial compliance quad-precision log: */
        !          5265: #if ((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD))
        !          5266:   _tme_ieee754_partial_quad_log,
        !          5267: #else  /* !((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)) */
        !          5268:   NULL,
        !          5269: #endif /* !((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)) */
        !          5270: 
        !          5271:   /* this does a partial compliance quad-precision log1p: */
        !          5272:   NULL,
        !          5273: 
        !          5274:   /* this does a partial compliance quad-precision getexp: */
        !          5275:   _tme_ieee754_strict_quad_getexp,
        !          5276: 
        !          5277:   /* this does a partial compliance quad-precision getman: */
        !          5278:   _tme_ieee754_strict_quad_getman,
        !          5279: 
        !          5280:   /* this does a partial compliance quad-precision scale: */
        !          5281: #if ((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD))
        !          5282:   _tme_ieee754_partial_quad_scale,
        !          5283: #else  /* !((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)) */
        !          5284:   NULL,
        !          5285: #endif /* !((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)) */
        !          5286: 
        !          5287:   /* this does a partial compliance quad-precision pow: */
        !          5288: #if ((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD))
        !          5289:   _tme_ieee754_partial_quad_pow,
        !          5290: #else  /* !((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)) */
        !          5291:   NULL,
        !          5292: #endif /* !((TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_IEEE754_QUAD)) */
        !          5293: 
        !          5294:   /* this does a partial compliance quad-precision from_single: */
        !          5295: #if (defined(TME_HAVE_INT64_T))
        !          5296:   _tme_ieee754_strict_quad_from_single,
        !          5297: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          5298:   NULL,
        !          5299: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          5300: 
        !          5301:   /* this does a partial compliance quad-precision from_double: */
        !          5302: #if (defined(TME_HAVE_INT64_T))
        !          5303:   _tme_ieee754_strict_quad_from_double,
        !          5304: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          5305:   NULL,
        !          5306: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          5307: 
        !          5308:   /* this does a partial compliance quad-precision from_extended80: */
        !          5309: #if (defined(TME_HAVE_INT64_T))
        !          5310:   _tme_ieee754_strict_quad_from_extended80,
        !          5311: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          5312:   NULL,
        !          5313: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          5314: 
        !          5315:   /* this does a partial compliance quad-precision to_int32: */
        !          5316:   _tme_ieee754_strict_quad_to_int32,
        !          5317: 
        !          5318:   /* this does a partial compliance quad-precision to_int64: */
        !          5319:   NULL,
        !          5320: };
        !          5321: 
        !          5322: /* this does a unknown compliance single-precision add: */
        !          5323: static void
        !          5324: _tme_ieee754_unknown_single_add(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          5325: {
        !          5326:   int exceptions;
        !          5327: 
        !          5328:   /* assume that this operation raises no exceptions: */
        !          5329:   exceptions = 0;
        !          5330: 
        !          5331:   /* the operation: */
        !          5332:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN, tme_ieee754_single_value_builtin_get(src0) + tme_ieee754_single_value_builtin_get(src1));
        !          5333:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5334: 
        !          5335:   /* signal any exceptions: */
        !          5336:   if (exceptions != 0) {
        !          5337:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5338:   }
        !          5339: }
        !          5340: 
        !          5341: /* this does a unknown compliance single-precision sub: */
        !          5342: static void
        !          5343: _tme_ieee754_unknown_single_sub(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          5344: {
        !          5345:   int exceptions;
        !          5346: 
        !          5347:   /* assume that this operation raises no exceptions: */
        !          5348:   exceptions = 0;
        !          5349: 
        !          5350:   /* the operation: */
        !          5351:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN, tme_ieee754_single_value_builtin_get(src0) - tme_ieee754_single_value_builtin_get(src1));
        !          5352:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5353: 
        !          5354:   /* signal any exceptions: */
        !          5355:   if (exceptions != 0) {
        !          5356:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5357:   }
        !          5358: }
        !          5359: 
        !          5360: /* this does a unknown compliance single-precision mul: */
        !          5361: static void
        !          5362: _tme_ieee754_unknown_single_mul(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          5363: {
        !          5364:   int exceptions;
        !          5365: 
        !          5366:   /* assume that this operation raises no exceptions: */
        !          5367:   exceptions = 0;
        !          5368: 
        !          5369:   /* the operation: */
        !          5370:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN, tme_ieee754_single_value_builtin_get(src0) * tme_ieee754_single_value_builtin_get(src1));
        !          5371:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5372: 
        !          5373:   /* signal any exceptions: */
        !          5374:   if (exceptions != 0) {
        !          5375:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5376:   }
        !          5377: }
        !          5378: 
        !          5379: /* this does a unknown compliance single-precision div: */
        !          5380: static void
        !          5381: _tme_ieee754_unknown_single_div(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          5382: {
        !          5383:   int exceptions;
        !          5384: 
        !          5385:   /* assume that this operation raises no exceptions: */
        !          5386:   exceptions = 0;
        !          5387: 
        !          5388:   /* the operation: */
        !          5389:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN, tme_ieee754_single_value_builtin_get(src0) / tme_ieee754_single_value_builtin_get(src1));
        !          5390:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5391: 
        !          5392:   /* signal any exceptions: */
        !          5393:   if (exceptions != 0) {
        !          5394:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5395:   }
        !          5396: }
        !          5397: 
        !          5398: /* this does a unknown compliance single-precision sqrt: */
        !          5399: static void
        !          5400: _tme_ieee754_unknown_single_sqrt(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          5401: {
        !          5402:   int exceptions;
        !          5403: 
        !          5404:   /* assume that this operation raises no exceptions: */
        !          5405:   exceptions = 0;
        !          5406: 
        !          5407:   /* the operation: */
        !          5408: #if (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          5409:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, sqrtf(tme_ieee754_single_value_builtin_get(src0)));
        !          5410: #else  /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5411:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, sqrt(tme_ieee754_single_value_builtin_get(src0)));
        !          5412: #endif /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5413:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5414: 
        !          5415:   /* signal any exceptions: */
        !          5416:   if (exceptions != 0) {
        !          5417:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5418:   }
        !          5419: }
        !          5420: 
        !          5421: /* this does a unknown compliance single-precision abs: */
        !          5422: static void
        !          5423: _tme_ieee754_unknown_single_abs(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          5424: {
        !          5425:   int exceptions;
        !          5426: 
        !          5427:   /* assume that this operation raises no exceptions: */
        !          5428:   exceptions = 0;
        !          5429: 
        !          5430:   /* the operation: */
        !          5431: #if (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          5432:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, fabsf(tme_ieee754_single_value_builtin_get(src0)));
        !          5433: #else  /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5434:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, fabs(tme_ieee754_single_value_builtin_get(src0)));
        !          5435: #endif /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5436:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5437: 
        !          5438:   /* signal any exceptions: */
        !          5439:   if (exceptions != 0) {
        !          5440:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5441:   }
        !          5442: }
        !          5443: 
        !          5444: /* this does a unknown compliance single-precision neg: */
        !          5445: static void
        !          5446: _tme_ieee754_unknown_single_neg(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          5447: {
        !          5448:   int exceptions;
        !          5449: 
        !          5450:   /* assume that this operation raises no exceptions: */
        !          5451:   exceptions = 0;
        !          5452: 
        !          5453:   /* the operation: */
        !          5454:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN, 0 - tme_ieee754_single_value_builtin_get(src0));
        !          5455:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5456: 
        !          5457:   /* signal any exceptions: */
        !          5458:   if (exceptions != 0) {
        !          5459:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5460:   }
        !          5461: }
        !          5462: 
        !          5463: /* this does a unknown compliance single-precision move: */
        !          5464: static void
        !          5465: _tme_ieee754_unknown_single_move(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          5466: {
        !          5467:   int exceptions;
        !          5468: 
        !          5469:   /* assume that this operation raises no exceptions: */
        !          5470:   exceptions = 0;
        !          5471: 
        !          5472:   /* the operation: */
        !          5473:   *dst = *src0;
        !          5474:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5475: 
        !          5476:   /* signal any exceptions: */
        !          5477:   if (exceptions != 0) {
        !          5478:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5479:   }
        !          5480: }
        !          5481: 
        !          5482: /* this does a unknown compliance single-precision exp: */
        !          5483: static void
        !          5484: _tme_ieee754_unknown_single_exp(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          5485: {
        !          5486:   int exceptions;
        !          5487: 
        !          5488:   /* assume that this operation raises no exceptions: */
        !          5489:   exceptions = 0;
        !          5490: 
        !          5491:   /* the operation: */
        !          5492: #if (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          5493:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, expf(tme_ieee754_single_value_builtin_get(src0)));
        !          5494: #else  /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5495:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, exp(tme_ieee754_single_value_builtin_get(src0)));
        !          5496: #endif /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5497:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5498: 
        !          5499:   /* signal any exceptions: */
        !          5500:   if (exceptions != 0) {
        !          5501:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5502:   }
        !          5503: }
        !          5504: 
        !          5505: /* this does a unknown compliance single-precision log10: */
        !          5506: static void
        !          5507: _tme_ieee754_unknown_single_log10(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          5508: {
        !          5509:   int exceptions;
        !          5510: 
        !          5511:   /* assume that this operation raises no exceptions: */
        !          5512:   exceptions = 0;
        !          5513: 
        !          5514:   /* the operation: */
        !          5515: #if (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          5516:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, log10f(tme_ieee754_single_value_builtin_get(src0)));
        !          5517: #else  /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5518:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, log10(tme_ieee754_single_value_builtin_get(src0)));
        !          5519: #endif /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5520:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5521: 
        !          5522:   /* signal any exceptions: */
        !          5523:   if (exceptions != 0) {
        !          5524:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5525:   }
        !          5526: }
        !          5527: 
        !          5528: /* this does a unknown compliance single-precision log: */
        !          5529: static void
        !          5530: _tme_ieee754_unknown_single_log(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          5531: {
        !          5532:   int exceptions;
        !          5533: 
        !          5534:   /* assume that this operation raises no exceptions: */
        !          5535:   exceptions = 0;
        !          5536: 
        !          5537:   /* the operation: */
        !          5538: #if (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          5539:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, logf(tme_ieee754_single_value_builtin_get(src0)));
        !          5540: #else  /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5541:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, log(tme_ieee754_single_value_builtin_get(src0)));
        !          5542: #endif /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5543:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5544: 
        !          5545:   /* signal any exceptions: */
        !          5546:   if (exceptions != 0) {
        !          5547:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5548:   }
        !          5549: }
        !          5550: 
        !          5551: /* this does a unknown compliance single-precision scale: */
        !          5552: static void
        !          5553: _tme_ieee754_unknown_single_scale(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          5554: {
        !          5555:   int exceptions;
        !          5556: 
        !          5557:   /* assume that this operation raises no exceptions: */
        !          5558:   exceptions = 0;
        !          5559: 
        !          5560:   /* the operation: */
        !          5561: #if (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          5562:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, scalbnf(tme_ieee754_single_value_builtin_get(src0), tme_ieee754_single_value_builtin_get(src1)));
        !          5563: #else  /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5564:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, scalbn(tme_ieee754_single_value_builtin_get(src0), tme_ieee754_single_value_builtin_get(src1)));
        !          5565: #endif /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5566:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5567: 
        !          5568:   /* signal any exceptions: */
        !          5569:   if (exceptions != 0) {
        !          5570:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5571:   }
        !          5572: }
        !          5573: 
        !          5574: /* this does a unknown compliance single-precision pow: */
        !          5575: static void
        !          5576: _tme_ieee754_unknown_single_pow(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          5577: {
        !          5578:   int exceptions;
        !          5579: 
        !          5580:   /* assume that this operation raises no exceptions: */
        !          5581:   exceptions = 0;
        !          5582: 
        !          5583:   /* the operation: */
        !          5584: #if (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          5585:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, powf(tme_ieee754_single_value_builtin_get(src0), tme_ieee754_single_value_builtin_get(src1)));
        !          5586: #else  /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5587:   tme_ieee754_single_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, pow(tme_ieee754_single_value_builtin_get(src0), tme_ieee754_single_value_builtin_get(src1)));
        !          5588: #endif /* (TME_FLOAT_FORMAT_IEEE754_SINGLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5589:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5590: 
        !          5591:   /* signal any exceptions: */
        !          5592:   if (exceptions != 0) {
        !          5593:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5594:   }
        !          5595: }
        !          5596: 
        !          5597: /* this does a unknown compliance double-precision add: */
        !          5598: static void
        !          5599: _tme_ieee754_unknown_double_add(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          5600: {
        !          5601:   int exceptions;
        !          5602: 
        !          5603:   /* assume that this operation raises no exceptions: */
        !          5604:   exceptions = 0;
        !          5605: 
        !          5606:   /* the operation: */
        !          5607:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN, tme_ieee754_double_value_builtin_get(src0) + tme_ieee754_double_value_builtin_get(src1));
        !          5608:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5609: 
        !          5610:   /* signal any exceptions: */
        !          5611:   if (exceptions != 0) {
        !          5612:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5613:   }
        !          5614: }
        !          5615: 
        !          5616: /* this does a unknown compliance double-precision sub: */
        !          5617: static void
        !          5618: _tme_ieee754_unknown_double_sub(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          5619: {
        !          5620:   int exceptions;
        !          5621: 
        !          5622:   /* assume that this operation raises no exceptions: */
        !          5623:   exceptions = 0;
        !          5624: 
        !          5625:   /* the operation: */
        !          5626:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN, tme_ieee754_double_value_builtin_get(src0) - tme_ieee754_double_value_builtin_get(src1));
        !          5627:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5628: 
        !          5629:   /* signal any exceptions: */
        !          5630:   if (exceptions != 0) {
        !          5631:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5632:   }
        !          5633: }
        !          5634: 
        !          5635: /* this does a unknown compliance double-precision mul: */
        !          5636: static void
        !          5637: _tme_ieee754_unknown_double_mul(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          5638: {
        !          5639:   int exceptions;
        !          5640: 
        !          5641:   /* assume that this operation raises no exceptions: */
        !          5642:   exceptions = 0;
        !          5643: 
        !          5644:   /* the operation: */
        !          5645:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN, tme_ieee754_double_value_builtin_get(src0) * tme_ieee754_double_value_builtin_get(src1));
        !          5646:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5647: 
        !          5648:   /* signal any exceptions: */
        !          5649:   if (exceptions != 0) {
        !          5650:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5651:   }
        !          5652: }
        !          5653: 
        !          5654: /* this does a unknown compliance double-precision div: */
        !          5655: static void
        !          5656: _tme_ieee754_unknown_double_div(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          5657: {
        !          5658:   int exceptions;
        !          5659: 
        !          5660:   /* assume that this operation raises no exceptions: */
        !          5661:   exceptions = 0;
        !          5662: 
        !          5663:   /* the operation: */
        !          5664:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN, tme_ieee754_double_value_builtin_get(src0) / tme_ieee754_double_value_builtin_get(src1));
        !          5665:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5666: 
        !          5667:   /* signal any exceptions: */
        !          5668:   if (exceptions != 0) {
        !          5669:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5670:   }
        !          5671: }
        !          5672: 
        !          5673: /* this does a unknown compliance double-precision sqrt: */
        !          5674: static void
        !          5675: _tme_ieee754_unknown_double_sqrt(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          5676: {
        !          5677:   int exceptions;
        !          5678: 
        !          5679:   /* assume that this operation raises no exceptions: */
        !          5680:   exceptions = 0;
        !          5681: 
        !          5682:   /* the operation: */
        !          5683: #if (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          5684:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, sqrtf(tme_ieee754_double_value_builtin_get(src0)));
        !          5685: #else  /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5686:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, sqrt(tme_ieee754_double_value_builtin_get(src0)));
        !          5687: #endif /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5688:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5689: 
        !          5690:   /* signal any exceptions: */
        !          5691:   if (exceptions != 0) {
        !          5692:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5693:   }
        !          5694: }
        !          5695: 
        !          5696: /* this does a unknown compliance double-precision abs: */
        !          5697: static void
        !          5698: _tme_ieee754_unknown_double_abs(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          5699: {
        !          5700:   int exceptions;
        !          5701: 
        !          5702:   /* assume that this operation raises no exceptions: */
        !          5703:   exceptions = 0;
        !          5704: 
        !          5705:   /* the operation: */
        !          5706: #if (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          5707:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, fabsf(tme_ieee754_double_value_builtin_get(src0)));
        !          5708: #else  /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5709:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, fabs(tme_ieee754_double_value_builtin_get(src0)));
        !          5710: #endif /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5711:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5712: 
        !          5713:   /* signal any exceptions: */
        !          5714:   if (exceptions != 0) {
        !          5715:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5716:   }
        !          5717: }
        !          5718: 
        !          5719: /* this does a unknown compliance double-precision neg: */
        !          5720: static void
        !          5721: _tme_ieee754_unknown_double_neg(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          5722: {
        !          5723:   int exceptions;
        !          5724: 
        !          5725:   /* assume that this operation raises no exceptions: */
        !          5726:   exceptions = 0;
        !          5727: 
        !          5728:   /* the operation: */
        !          5729:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN, 0 - tme_ieee754_double_value_builtin_get(src0));
        !          5730:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5731: 
        !          5732:   /* signal any exceptions: */
        !          5733:   if (exceptions != 0) {
        !          5734:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5735:   }
        !          5736: }
        !          5737: 
        !          5738: /* this does a unknown compliance double-precision move: */
        !          5739: static void
        !          5740: _tme_ieee754_unknown_double_move(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          5741: {
        !          5742:   int exceptions;
        !          5743: 
        !          5744:   /* assume that this operation raises no exceptions: */
        !          5745:   exceptions = 0;
        !          5746: 
        !          5747:   /* the operation: */
        !          5748:   *dst = *src0;
        !          5749:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5750: 
        !          5751:   /* signal any exceptions: */
        !          5752:   if (exceptions != 0) {
        !          5753:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5754:   }
        !          5755: }
        !          5756: 
        !          5757: /* this does a unknown compliance double-precision exp: */
        !          5758: static void
        !          5759: _tme_ieee754_unknown_double_exp(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          5760: {
        !          5761:   int exceptions;
        !          5762: 
        !          5763:   /* assume that this operation raises no exceptions: */
        !          5764:   exceptions = 0;
        !          5765: 
        !          5766:   /* the operation: */
        !          5767: #if (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          5768:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, expf(tme_ieee754_double_value_builtin_get(src0)));
        !          5769: #else  /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5770:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, exp(tme_ieee754_double_value_builtin_get(src0)));
        !          5771: #endif /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5772:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5773: 
        !          5774:   /* signal any exceptions: */
        !          5775:   if (exceptions != 0) {
        !          5776:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5777:   }
        !          5778: }
        !          5779: 
        !          5780: /* this does a unknown compliance double-precision log10: */
        !          5781: static void
        !          5782: _tme_ieee754_unknown_double_log10(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          5783: {
        !          5784:   int exceptions;
        !          5785: 
        !          5786:   /* assume that this operation raises no exceptions: */
        !          5787:   exceptions = 0;
        !          5788: 
        !          5789:   /* the operation: */
        !          5790: #if (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          5791:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, log10f(tme_ieee754_double_value_builtin_get(src0)));
        !          5792: #else  /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5793:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, log10(tme_ieee754_double_value_builtin_get(src0)));
        !          5794: #endif /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5795:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5796: 
        !          5797:   /* signal any exceptions: */
        !          5798:   if (exceptions != 0) {
        !          5799:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5800:   }
        !          5801: }
        !          5802: 
        !          5803: /* this does a unknown compliance double-precision log: */
        !          5804: static void
        !          5805: _tme_ieee754_unknown_double_log(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          5806: {
        !          5807:   int exceptions;
        !          5808: 
        !          5809:   /* assume that this operation raises no exceptions: */
        !          5810:   exceptions = 0;
        !          5811: 
        !          5812:   /* the operation: */
        !          5813: #if (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          5814:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, logf(tme_ieee754_double_value_builtin_get(src0)));
        !          5815: #else  /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5816:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, log(tme_ieee754_double_value_builtin_get(src0)));
        !          5817: #endif /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5818:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5819: 
        !          5820:   /* signal any exceptions: */
        !          5821:   if (exceptions != 0) {
        !          5822:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5823:   }
        !          5824: }
        !          5825: 
        !          5826: /* this does a unknown compliance double-precision scale: */
        !          5827: static void
        !          5828: _tme_ieee754_unknown_double_scale(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          5829: {
        !          5830:   int exceptions;
        !          5831: 
        !          5832:   /* assume that this operation raises no exceptions: */
        !          5833:   exceptions = 0;
        !          5834: 
        !          5835:   /* the operation: */
        !          5836: #if (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          5837:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, scalbnf(tme_ieee754_double_value_builtin_get(src0), tme_ieee754_double_value_builtin_get(src1)));
        !          5838: #else  /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5839:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, scalbn(tme_ieee754_double_value_builtin_get(src0), tme_ieee754_double_value_builtin_get(src1)));
        !          5840: #endif /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5841:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5842: 
        !          5843:   /* signal any exceptions: */
        !          5844:   if (exceptions != 0) {
        !          5845:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5846:   }
        !          5847: }
        !          5848: 
        !          5849: /* this does a unknown compliance double-precision pow: */
        !          5850: static void
        !          5851: _tme_ieee754_unknown_double_pow(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          5852: {
        !          5853:   int exceptions;
        !          5854: 
        !          5855:   /* assume that this operation raises no exceptions: */
        !          5856:   exceptions = 0;
        !          5857: 
        !          5858:   /* the operation: */
        !          5859: #if (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          5860:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, powf(tme_ieee754_double_value_builtin_get(src0), tme_ieee754_double_value_builtin_get(src1)));
        !          5861: #else  /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5862:   tme_ieee754_double_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, pow(tme_ieee754_double_value_builtin_get(src0), tme_ieee754_double_value_builtin_get(src1)));
        !          5863: #endif /* (TME_FLOAT_FORMAT_IEEE754_DOUBLE_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5864:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5865: 
        !          5866:   /* signal any exceptions: */
        !          5867:   if (exceptions != 0) {
        !          5868:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5869:   }
        !          5870: }
        !          5871: 
        !          5872: /* this does a unknown compliance extended80-precision add: */
        !          5873: static void
        !          5874: _tme_ieee754_unknown_extended80_add(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          5875: {
        !          5876:   int exceptions;
        !          5877: 
        !          5878:   /* assume that this operation raises no exceptions: */
        !          5879:   exceptions = 0;
        !          5880: 
        !          5881:   /* the operation: */
        !          5882:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN, tme_ieee754_extended80_value_builtin_get(src0) + tme_ieee754_extended80_value_builtin_get(src1));
        !          5883:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5884: 
        !          5885:   /* signal any exceptions: */
        !          5886:   if (exceptions != 0) {
        !          5887:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5888:   }
        !          5889: }
        !          5890: 
        !          5891: /* this does a unknown compliance extended80-precision sub: */
        !          5892: static void
        !          5893: _tme_ieee754_unknown_extended80_sub(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          5894: {
        !          5895:   int exceptions;
        !          5896: 
        !          5897:   /* assume that this operation raises no exceptions: */
        !          5898:   exceptions = 0;
        !          5899: 
        !          5900:   /* the operation: */
        !          5901:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN, tme_ieee754_extended80_value_builtin_get(src0) - tme_ieee754_extended80_value_builtin_get(src1));
        !          5902:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5903: 
        !          5904:   /* signal any exceptions: */
        !          5905:   if (exceptions != 0) {
        !          5906:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5907:   }
        !          5908: }
        !          5909: 
        !          5910: /* this does a unknown compliance extended80-precision mul: */
        !          5911: static void
        !          5912: _tme_ieee754_unknown_extended80_mul(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          5913: {
        !          5914:   int exceptions;
        !          5915: 
        !          5916:   /* assume that this operation raises no exceptions: */
        !          5917:   exceptions = 0;
        !          5918: 
        !          5919:   /* the operation: */
        !          5920:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN, tme_ieee754_extended80_value_builtin_get(src0) * tme_ieee754_extended80_value_builtin_get(src1));
        !          5921:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5922: 
        !          5923:   /* signal any exceptions: */
        !          5924:   if (exceptions != 0) {
        !          5925:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5926:   }
        !          5927: }
        !          5928: 
        !          5929: /* this does a unknown compliance extended80-precision div: */
        !          5930: static void
        !          5931: _tme_ieee754_unknown_extended80_div(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          5932: {
        !          5933:   int exceptions;
        !          5934: 
        !          5935:   /* assume that this operation raises no exceptions: */
        !          5936:   exceptions = 0;
        !          5937: 
        !          5938:   /* the operation: */
        !          5939:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN, tme_ieee754_extended80_value_builtin_get(src0) / tme_ieee754_extended80_value_builtin_get(src1));
        !          5940:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5941: 
        !          5942:   /* signal any exceptions: */
        !          5943:   if (exceptions != 0) {
        !          5944:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5945:   }
        !          5946: }
        !          5947: 
        !          5948: /* this does a unknown compliance extended80-precision sqrt: */
        !          5949: static void
        !          5950: _tme_ieee754_unknown_extended80_sqrt(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          5951: {
        !          5952:   int exceptions;
        !          5953: 
        !          5954:   /* assume that this operation raises no exceptions: */
        !          5955:   exceptions = 0;
        !          5956: 
        !          5957:   /* the operation: */
        !          5958: #if (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          5959:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, sqrtf(tme_ieee754_extended80_value_builtin_get(src0)));
        !          5960: #else  /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5961:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, sqrt(tme_ieee754_extended80_value_builtin_get(src0)));
        !          5962: #endif /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5963:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5964: 
        !          5965:   /* signal any exceptions: */
        !          5966:   if (exceptions != 0) {
        !          5967:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5968:   }
        !          5969: }
        !          5970: 
        !          5971: /* this does a unknown compliance extended80-precision abs: */
        !          5972: static void
        !          5973: _tme_ieee754_unknown_extended80_abs(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          5974: {
        !          5975:   int exceptions;
        !          5976: 
        !          5977:   /* assume that this operation raises no exceptions: */
        !          5978:   exceptions = 0;
        !          5979: 
        !          5980:   /* the operation: */
        !          5981: #if (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          5982:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, fabsf(tme_ieee754_extended80_value_builtin_get(src0)));
        !          5983: #else  /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5984:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, fabs(tme_ieee754_extended80_value_builtin_get(src0)));
        !          5985: #endif /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          5986:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          5987: 
        !          5988:   /* signal any exceptions: */
        !          5989:   if (exceptions != 0) {
        !          5990:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          5991:   }
        !          5992: }
        !          5993: 
        !          5994: /* this does a unknown compliance extended80-precision neg: */
        !          5995: static void
        !          5996: _tme_ieee754_unknown_extended80_neg(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          5997: {
        !          5998:   int exceptions;
        !          5999: 
        !          6000:   /* assume that this operation raises no exceptions: */
        !          6001:   exceptions = 0;
        !          6002: 
        !          6003:   /* the operation: */
        !          6004:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN, 0 - tme_ieee754_extended80_value_builtin_get(src0));
        !          6005:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          6006: 
        !          6007:   /* signal any exceptions: */
        !          6008:   if (exceptions != 0) {
        !          6009:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          6010:   }
        !          6011: }
        !          6012: 
        !          6013: /* this does a unknown compliance extended80-precision move: */
        !          6014: static void
        !          6015: _tme_ieee754_unknown_extended80_move(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          6016: {
        !          6017:   int exceptions;
        !          6018: 
        !          6019:   /* assume that this operation raises no exceptions: */
        !          6020:   exceptions = 0;
        !          6021: 
        !          6022:   /* the operation: */
        !          6023:   *dst = *src0;
        !          6024:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          6025: 
        !          6026:   /* signal any exceptions: */
        !          6027:   if (exceptions != 0) {
        !          6028:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          6029:   }
        !          6030: }
        !          6031: 
        !          6032: /* this does a unknown compliance extended80-precision exp: */
        !          6033: static void
        !          6034: _tme_ieee754_unknown_extended80_exp(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          6035: {
        !          6036:   int exceptions;
        !          6037: 
        !          6038:   /* assume that this operation raises no exceptions: */
        !          6039:   exceptions = 0;
        !          6040: 
        !          6041:   /* the operation: */
        !          6042: #if (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          6043:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, expf(tme_ieee754_extended80_value_builtin_get(src0)));
        !          6044: #else  /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          6045:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, exp(tme_ieee754_extended80_value_builtin_get(src0)));
        !          6046: #endif /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          6047:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          6048: 
        !          6049:   /* signal any exceptions: */
        !          6050:   if (exceptions != 0) {
        !          6051:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          6052:   }
        !          6053: }
        !          6054: 
        !          6055: /* this does a unknown compliance extended80-precision log10: */
        !          6056: static void
        !          6057: _tme_ieee754_unknown_extended80_log10(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          6058: {
        !          6059:   int exceptions;
        !          6060: 
        !          6061:   /* assume that this operation raises no exceptions: */
        !          6062:   exceptions = 0;
        !          6063: 
        !          6064:   /* the operation: */
        !          6065: #if (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          6066:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, log10f(tme_ieee754_extended80_value_builtin_get(src0)));
        !          6067: #else  /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          6068:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, log10(tme_ieee754_extended80_value_builtin_get(src0)));
        !          6069: #endif /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          6070:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          6071: 
        !          6072:   /* signal any exceptions: */
        !          6073:   if (exceptions != 0) {
        !          6074:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          6075:   }
        !          6076: }
        !          6077: 
        !          6078: /* this does a unknown compliance extended80-precision log: */
        !          6079: static void
        !          6080: _tme_ieee754_unknown_extended80_log(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          6081: {
        !          6082:   int exceptions;
        !          6083: 
        !          6084:   /* assume that this operation raises no exceptions: */
        !          6085:   exceptions = 0;
        !          6086: 
        !          6087:   /* the operation: */
        !          6088: #if (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          6089:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, logf(tme_ieee754_extended80_value_builtin_get(src0)));
        !          6090: #else  /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          6091:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, log(tme_ieee754_extended80_value_builtin_get(src0)));
        !          6092: #endif /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          6093:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          6094: 
        !          6095:   /* signal any exceptions: */
        !          6096:   if (exceptions != 0) {
        !          6097:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          6098:   }
        !          6099: }
        !          6100: 
        !          6101: /* this does a unknown compliance extended80-precision scale: */
        !          6102: static void
        !          6103: _tme_ieee754_unknown_extended80_scale(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          6104: {
        !          6105:   int exceptions;
        !          6106: 
        !          6107:   /* assume that this operation raises no exceptions: */
        !          6108:   exceptions = 0;
        !          6109: 
        !          6110:   /* the operation: */
        !          6111: #if (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          6112:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, scalbnf(tme_ieee754_extended80_value_builtin_get(src0), tme_ieee754_extended80_value_builtin_get(src1)));
        !          6113: #else  /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          6114:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, scalbn(tme_ieee754_extended80_value_builtin_get(src0), tme_ieee754_extended80_value_builtin_get(src1)));
        !          6115: #endif /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          6116:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          6117: 
        !          6118:   /* signal any exceptions: */
        !          6119:   if (exceptions != 0) {
        !          6120:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          6121:   }
        !          6122: }
        !          6123: 
        !          6124: /* this does a unknown compliance extended80-precision pow: */
        !          6125: static void
        !          6126: _tme_ieee754_unknown_extended80_pow(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          6127: {
        !          6128:   int exceptions;
        !          6129: 
        !          6130:   /* assume that this operation raises no exceptions: */
        !          6131:   exceptions = 0;
        !          6132: 
        !          6133:   /* the operation: */
        !          6134: #if (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          6135:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, powf(tme_ieee754_extended80_value_builtin_get(src0), tme_ieee754_extended80_value_builtin_get(src1)));
        !          6136: #else  /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          6137:   tme_ieee754_extended80_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, pow(tme_ieee754_extended80_value_builtin_get(src0), tme_ieee754_extended80_value_builtin_get(src1)));
        !          6138: #endif /* (TME_FLOAT_FORMAT_IEEE754_EXTENDED80_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          6139:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          6140: 
        !          6141:   /* signal any exceptions: */
        !          6142:   if (exceptions != 0) {
        !          6143:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          6144:   }
        !          6145: }
        !          6146: 
        !          6147: /* this does a unknown compliance quad-precision add: */
        !          6148: static void
        !          6149: _tme_ieee754_unknown_quad_add(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          6150: {
        !          6151:   int exceptions;
        !          6152: 
        !          6153:   /* assume that this operation raises no exceptions: */
        !          6154:   exceptions = 0;
        !          6155: 
        !          6156:   /* the operation: */
        !          6157:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN, tme_ieee754_quad_value_builtin_get(src0) + tme_ieee754_quad_value_builtin_get(src1));
        !          6158:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          6159: 
        !          6160:   /* signal any exceptions: */
        !          6161:   if (exceptions != 0) {
        !          6162:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          6163:   }
        !          6164: }
        !          6165: 
        !          6166: /* this does a unknown compliance quad-precision sub: */
        !          6167: static void
        !          6168: _tme_ieee754_unknown_quad_sub(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          6169: {
        !          6170:   int exceptions;
        !          6171: 
        !          6172:   /* assume that this operation raises no exceptions: */
        !          6173:   exceptions = 0;
        !          6174: 
        !          6175:   /* the operation: */
        !          6176:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN, tme_ieee754_quad_value_builtin_get(src0) - tme_ieee754_quad_value_builtin_get(src1));
        !          6177:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          6178: 
        !          6179:   /* signal any exceptions: */
        !          6180:   if (exceptions != 0) {
        !          6181:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          6182:   }
        !          6183: }
        !          6184: 
        !          6185: /* this does a unknown compliance quad-precision mul: */
        !          6186: static void
        !          6187: _tme_ieee754_unknown_quad_mul(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          6188: {
        !          6189:   int exceptions;
        !          6190: 
        !          6191:   /* assume that this operation raises no exceptions: */
        !          6192:   exceptions = 0;
        !          6193: 
        !          6194:   /* the operation: */
        !          6195:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN, tme_ieee754_quad_value_builtin_get(src0) * tme_ieee754_quad_value_builtin_get(src1));
        !          6196:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          6197: 
        !          6198:   /* signal any exceptions: */
        !          6199:   if (exceptions != 0) {
        !          6200:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          6201:   }
        !          6202: }
        !          6203: 
        !          6204: /* this does a unknown compliance quad-precision div: */
        !          6205: static void
        !          6206: _tme_ieee754_unknown_quad_div(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          6207: {
        !          6208:   int exceptions;
        !          6209: 
        !          6210:   /* assume that this operation raises no exceptions: */
        !          6211:   exceptions = 0;
        !          6212: 
        !          6213:   /* the operation: */
        !          6214:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN, tme_ieee754_quad_value_builtin_get(src0) / tme_ieee754_quad_value_builtin_get(src1));
        !          6215:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          6216: 
        !          6217:   /* signal any exceptions: */
        !          6218:   if (exceptions != 0) {
        !          6219:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          6220:   }
        !          6221: }
        !          6222: 
        !          6223: /* this does a unknown compliance quad-precision sqrt: */
        !          6224: static void
        !          6225: _tme_ieee754_unknown_quad_sqrt(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          6226: {
        !          6227:   int exceptions;
        !          6228: 
        !          6229:   /* assume that this operation raises no exceptions: */
        !          6230:   exceptions = 0;
        !          6231: 
        !          6232:   /* the operation: */
        !          6233: #if (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          6234:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, sqrtf(tme_ieee754_quad_value_builtin_get(src0)));
        !          6235: #else  /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          6236:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, sqrt(tme_ieee754_quad_value_builtin_get(src0)));
        !          6237: #endif /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          6238:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          6239: 
        !          6240:   /* signal any exceptions: */
        !          6241:   if (exceptions != 0) {
        !          6242:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          6243:   }
        !          6244: }
        !          6245: 
        !          6246: /* this does a unknown compliance quad-precision abs: */
        !          6247: static void
        !          6248: _tme_ieee754_unknown_quad_abs(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          6249: {
        !          6250:   int exceptions;
        !          6251: 
        !          6252:   /* assume that this operation raises no exceptions: */
        !          6253:   exceptions = 0;
        !          6254: 
        !          6255:   /* the operation: */
        !          6256: #if (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          6257:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, fabsf(tme_ieee754_quad_value_builtin_get(src0)));
        !          6258: #else  /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          6259:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, fabs(tme_ieee754_quad_value_builtin_get(src0)));
        !          6260: #endif /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          6261:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          6262: 
        !          6263:   /* signal any exceptions: */
        !          6264:   if (exceptions != 0) {
        !          6265:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          6266:   }
        !          6267: }
        !          6268: 
        !          6269: /* this does a unknown compliance quad-precision neg: */
        !          6270: static void
        !          6271: _tme_ieee754_unknown_quad_neg(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          6272: {
        !          6273:   int exceptions;
        !          6274: 
        !          6275:   /* assume that this operation raises no exceptions: */
        !          6276:   exceptions = 0;
        !          6277: 
        !          6278:   /* the operation: */
        !          6279:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN, 0 - tme_ieee754_quad_value_builtin_get(src0));
        !          6280:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          6281: 
        !          6282:   /* signal any exceptions: */
        !          6283:   if (exceptions != 0) {
        !          6284:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          6285:   }
        !          6286: }
        !          6287: 
        !          6288: /* this does a unknown compliance quad-precision move: */
        !          6289: static void
        !          6290: _tme_ieee754_unknown_quad_move(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          6291: {
        !          6292:   int exceptions;
        !          6293: 
        !          6294:   /* assume that this operation raises no exceptions: */
        !          6295:   exceptions = 0;
        !          6296: 
        !          6297:   /* the operation: */
        !          6298:   *dst = *src0;
        !          6299:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          6300: 
        !          6301:   /* signal any exceptions: */
        !          6302:   if (exceptions != 0) {
        !          6303:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          6304:   }
        !          6305: }
        !          6306: 
        !          6307: /* this does a unknown compliance quad-precision exp: */
        !          6308: static void
        !          6309: _tme_ieee754_unknown_quad_exp(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          6310: {
        !          6311:   int exceptions;
        !          6312: 
        !          6313:   /* assume that this operation raises no exceptions: */
        !          6314:   exceptions = 0;
        !          6315: 
        !          6316:   /* the operation: */
        !          6317: #if (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          6318:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, expf(tme_ieee754_quad_value_builtin_get(src0)));
        !          6319: #else  /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          6320:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, exp(tme_ieee754_quad_value_builtin_get(src0)));
        !          6321: #endif /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          6322:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          6323: 
        !          6324:   /* signal any exceptions: */
        !          6325:   if (exceptions != 0) {
        !          6326:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          6327:   }
        !          6328: }
        !          6329: 
        !          6330: /* this does a unknown compliance quad-precision log10: */
        !          6331: static void
        !          6332: _tme_ieee754_unknown_quad_log10(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          6333: {
        !          6334:   int exceptions;
        !          6335: 
        !          6336:   /* assume that this operation raises no exceptions: */
        !          6337:   exceptions = 0;
        !          6338: 
        !          6339:   /* the operation: */
        !          6340: #if (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          6341:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, log10f(tme_ieee754_quad_value_builtin_get(src0)));
        !          6342: #else  /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          6343:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, log10(tme_ieee754_quad_value_builtin_get(src0)));
        !          6344: #endif /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          6345:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          6346: 
        !          6347:   /* signal any exceptions: */
        !          6348:   if (exceptions != 0) {
        !          6349:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          6350:   }
        !          6351: }
        !          6352: 
        !          6353: /* this does a unknown compliance quad-precision log: */
        !          6354: static void
        !          6355: _tme_ieee754_unknown_quad_log(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, struct tme_float *dst)
        !          6356: {
        !          6357:   int exceptions;
        !          6358: 
        !          6359:   /* assume that this operation raises no exceptions: */
        !          6360:   exceptions = 0;
        !          6361: 
        !          6362:   /* the operation: */
        !          6363: #if (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          6364:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, logf(tme_ieee754_quad_value_builtin_get(src0)));
        !          6365: #else  /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          6366:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, log(tme_ieee754_quad_value_builtin_get(src0)));
        !          6367: #endif /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          6368:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          6369: 
        !          6370:   /* signal any exceptions: */
        !          6371:   if (exceptions != 0) {
        !          6372:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          6373:   }
        !          6374: }
        !          6375: 
        !          6376: /* this does a unknown compliance quad-precision scale: */
        !          6377: static void
        !          6378: _tme_ieee754_unknown_quad_scale(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          6379: {
        !          6380:   int exceptions;
        !          6381: 
        !          6382:   /* assume that this operation raises no exceptions: */
        !          6383:   exceptions = 0;
        !          6384: 
        !          6385:   /* the operation: */
        !          6386: #if (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          6387:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, scalbnf(tme_ieee754_quad_value_builtin_get(src0), tme_ieee754_quad_value_builtin_get(src1)));
        !          6388: #else  /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          6389:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, scalbn(tme_ieee754_quad_value_builtin_get(src0), tme_ieee754_quad_value_builtin_get(src1)));
        !          6390: #endif /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          6391:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          6392: 
        !          6393:   /* signal any exceptions: */
        !          6394:   if (exceptions != 0) {
        !          6395:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          6396:   }
        !          6397: }
        !          6398: 
        !          6399: /* this does a unknown compliance quad-precision pow: */
        !          6400: static void
        !          6401: _tme_ieee754_unknown_quad_pow(struct tme_ieee754_ctl *ieee754_ctl, const struct tme_float *src0, const struct tme_float *src1, struct tme_float *dst)
        !          6402: {
        !          6403:   int exceptions;
        !          6404: 
        !          6405:   /* assume that this operation raises no exceptions: */
        !          6406:   exceptions = 0;
        !          6407: 
        !          6408:   /* the operation: */
        !          6409: #if (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN == TME_FLOAT_FORMAT_FLOAT)
        !          6410:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_FLOAT, powf(tme_ieee754_quad_value_builtin_get(src0), tme_ieee754_quad_value_builtin_get(src1)));
        !          6411: #else  /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          6412:   tme_ieee754_quad_value_builtin_set(dst, TME_FLOAT_FORMAT_DOUBLE, pow(tme_ieee754_quad_value_builtin_get(src0), tme_ieee754_quad_value_builtin_get(src1)));
        !          6413: #endif /* (TME_FLOAT_FORMAT_IEEE754_QUAD_BUILTIN != TME_FLOAT_FORMAT_FLOAT) */
        !          6414:   ieee754_ctl->tme_ieee754_ctl_lock_unlock = NULL;
        !          6415: 
        !          6416:   /* signal any exceptions: */
        !          6417:   if (exceptions != 0) {
        !          6418:     (*ieee754_ctl->tme_ieee754_ctl_exception)(ieee754_ctl, exceptions);
        !          6419:   }
        !          6420: }
        !          6421: 
        !          6422: /* the unknown compliance operations: */
        !          6423: _tme_const struct tme_ieee754_ops tme_ieee754_ops_unknown = {
        !          6424: 
        !          6425:   /* the version of this structure: */
        !          6426:   TME_X_VERSION(0, 0),
        !          6427: 
        !          6428:   /* this does a unknown compliance single-precision add: */
        !          6429:   _tme_ieee754_unknown_single_add,
        !          6430: 
        !          6431:   /* this does a unknown compliance single-precision sub: */
        !          6432:   _tme_ieee754_unknown_single_sub,
        !          6433: 
        !          6434:   /* this does a unknown compliance single-precision mul: */
        !          6435:   _tme_ieee754_unknown_single_mul,
        !          6436: 
        !          6437:   /* this does a unknown compliance single-precision div: */
        !          6438:   _tme_ieee754_unknown_single_div,
        !          6439: 
        !          6440:   /* this does a unknown compliance single-precision rem: */
        !          6441:   _tme_ieee754_strict_single_rem,
        !          6442: 
        !          6443:   /* this does a unknown compliance single-precision sqrt: */
        !          6444:   _tme_ieee754_unknown_single_sqrt,
        !          6445: 
        !          6446:   /* this does a unknown compliance single-precision abs: */
        !          6447:   _tme_ieee754_unknown_single_abs,
        !          6448: 
        !          6449:   /* this does a unknown compliance single-precision neg: */
        !          6450:   _tme_ieee754_unknown_single_neg,
        !          6451: 
        !          6452:   /* this does a unknown compliance single-precision move: */
        !          6453:   _tme_ieee754_unknown_single_move,
        !          6454: 
        !          6455:   /* this does a unknown compliance single-precision rint: */
        !          6456:   _tme_ieee754_strict_single_rint,
        !          6457: 
        !          6458:   /* this does a unknown compliance single-precision cos: */
        !          6459:   NULL,
        !          6460: 
        !          6461:   /* this does a unknown compliance single-precision acos: */
        !          6462:   NULL,
        !          6463: 
        !          6464:   /* this does a unknown compliance single-precision cosh: */
        !          6465:   NULL,
        !          6466: 
        !          6467:   /* this does a unknown compliance single-precision sin: */
        !          6468:   NULL,
        !          6469: 
        !          6470:   /* this does a unknown compliance single-precision asin: */
        !          6471:   NULL,
        !          6472: 
        !          6473:   /* this does a unknown compliance single-precision sinh: */
        !          6474:   NULL,
        !          6475: 
        !          6476:   /* this does a unknown compliance single-precision tan: */
        !          6477:   NULL,
        !          6478: 
        !          6479:   /* this does a unknown compliance single-precision atan: */
        !          6480:   NULL,
        !          6481: 
        !          6482:   /* this does a unknown compliance single-precision tanh: */
        !          6483:   NULL,
        !          6484: 
        !          6485:   /* this does a unknown compliance single-precision atanh: */
        !          6486:   NULL,
        !          6487: 
        !          6488:   /* this does a unknown compliance single-precision exp: */
        !          6489:   _tme_ieee754_unknown_single_exp,
        !          6490: 
        !          6491:   /* this does a unknown compliance single-precision expm1: */
        !          6492:   NULL,
        !          6493: 
        !          6494:   /* this does a unknown compliance single-precision log10: */
        !          6495:   _tme_ieee754_unknown_single_log10,
        !          6496: 
        !          6497:   /* this does a unknown compliance single-precision log: */
        !          6498:   _tme_ieee754_unknown_single_log,
        !          6499: 
        !          6500:   /* this does a unknown compliance single-precision log1p: */
        !          6501:   NULL,
        !          6502: 
        !          6503:   /* this does a unknown compliance single-precision getexp: */
        !          6504:   _tme_ieee754_strict_single_getexp,
        !          6505: 
        !          6506:   /* this does a unknown compliance single-precision getman: */
        !          6507:   _tme_ieee754_strict_single_getman,
        !          6508: 
        !          6509:   /* this does a unknown compliance single-precision scale: */
        !          6510:   _tme_ieee754_unknown_single_scale,
        !          6511: 
        !          6512:   /* this does a unknown compliance single-precision pow: */
        !          6513:   _tme_ieee754_unknown_single_pow,
        !          6514: 
        !          6515:   /* this does a unknown compliance single-precision from_double: */
        !          6516:   _tme_ieee754_strict_single_from_double,
        !          6517: 
        !          6518:   /* this does a unknown compliance single-precision from_extended80: */
        !          6519:   _tme_ieee754_strict_single_from_extended80,
        !          6520: 
        !          6521:   /* this does a unknown compliance single-precision from_quad: */
        !          6522:   _tme_ieee754_strict_single_from_quad,
        !          6523: 
        !          6524:   /* this does a unknown compliance single-precision to_int32: */
        !          6525:   _tme_ieee754_strict_single_to_int32,
        !          6526: 
        !          6527:   /* this does a unknown compliance single-precision to_int64: */
        !          6528:   NULL,
        !          6529: 
        !          6530:   /* this does a unknown compliance double-precision add: */
        !          6531:   _tme_ieee754_unknown_double_add,
        !          6532: 
        !          6533:   /* this does a unknown compliance double-precision sub: */
        !          6534:   _tme_ieee754_unknown_double_sub,
        !          6535: 
        !          6536:   /* this does a unknown compliance double-precision mul: */
        !          6537:   _tme_ieee754_unknown_double_mul,
        !          6538: 
        !          6539:   /* this does a unknown compliance double-precision div: */
        !          6540:   _tme_ieee754_unknown_double_div,
        !          6541: 
        !          6542:   /* this does a unknown compliance double-precision rem: */
        !          6543:   _tme_ieee754_strict_double_rem,
        !          6544: 
        !          6545:   /* this does a unknown compliance double-precision sqrt: */
        !          6546:   _tme_ieee754_unknown_double_sqrt,
        !          6547: 
        !          6548:   /* this does a unknown compliance double-precision abs: */
        !          6549:   _tme_ieee754_unknown_double_abs,
        !          6550: 
        !          6551:   /* this does a unknown compliance double-precision neg: */
        !          6552:   _tme_ieee754_unknown_double_neg,
        !          6553: 
        !          6554:   /* this does a unknown compliance double-precision move: */
        !          6555:   _tme_ieee754_unknown_double_move,
        !          6556: 
        !          6557:   /* this does a unknown compliance double-precision rint: */
        !          6558:   _tme_ieee754_strict_double_rint,
        !          6559: 
        !          6560:   /* this does a unknown compliance double-precision cos: */
        !          6561:   NULL,
        !          6562: 
        !          6563:   /* this does a unknown compliance double-precision acos: */
        !          6564:   NULL,
        !          6565: 
        !          6566:   /* this does a unknown compliance double-precision cosh: */
        !          6567:   NULL,
        !          6568: 
        !          6569:   /* this does a unknown compliance double-precision sin: */
        !          6570:   NULL,
        !          6571: 
        !          6572:   /* this does a unknown compliance double-precision asin: */
        !          6573:   NULL,
        !          6574: 
        !          6575:   /* this does a unknown compliance double-precision sinh: */
        !          6576:   NULL,
        !          6577: 
        !          6578:   /* this does a unknown compliance double-precision tan: */
        !          6579:   NULL,
        !          6580: 
        !          6581:   /* this does a unknown compliance double-precision atan: */
        !          6582:   NULL,
        !          6583: 
        !          6584:   /* this does a unknown compliance double-precision tanh: */
        !          6585:   NULL,
        !          6586: 
        !          6587:   /* this does a unknown compliance double-precision atanh: */
        !          6588:   NULL,
        !          6589: 
        !          6590:   /* this does a unknown compliance double-precision exp: */
        !          6591:   _tme_ieee754_unknown_double_exp,
        !          6592: 
        !          6593:   /* this does a unknown compliance double-precision expm1: */
        !          6594:   NULL,
        !          6595: 
        !          6596:   /* this does a unknown compliance double-precision log10: */
        !          6597:   _tme_ieee754_unknown_double_log10,
        !          6598: 
        !          6599:   /* this does a unknown compliance double-precision log: */
        !          6600:   _tme_ieee754_unknown_double_log,
        !          6601: 
        !          6602:   /* this does a unknown compliance double-precision log1p: */
        !          6603:   NULL,
        !          6604: 
        !          6605:   /* this does a unknown compliance double-precision getexp: */
        !          6606:   _tme_ieee754_strict_double_getexp,
        !          6607: 
        !          6608:   /* this does a unknown compliance double-precision getman: */
        !          6609:   _tme_ieee754_strict_double_getman,
        !          6610: 
        !          6611:   /* this does a unknown compliance double-precision scale: */
        !          6612:   _tme_ieee754_unknown_double_scale,
        !          6613: 
        !          6614:   /* this does a unknown compliance double-precision pow: */
        !          6615:   _tme_ieee754_unknown_double_pow,
        !          6616: 
        !          6617:   /* this does a unknown compliance double-precision from_single: */
        !          6618:   _tme_ieee754_strict_double_from_single,
        !          6619: 
        !          6620:   /* this does a unknown compliance double-precision from_extended80: */
        !          6621:   _tme_ieee754_strict_double_from_extended80,
        !          6622: 
        !          6623:   /* this does a unknown compliance double-precision from_quad: */
        !          6624:   _tme_ieee754_strict_double_from_quad,
        !          6625: 
        !          6626:   /* this does a unknown compliance double-precision to_int32: */
        !          6627:   _tme_ieee754_strict_double_to_int32,
        !          6628: 
        !          6629:   /* this does a unknown compliance double-precision to_int64: */
        !          6630:   NULL,
        !          6631: 
        !          6632:   /* this does a unknown compliance extended80-precision add: */
        !          6633:   _tme_ieee754_unknown_extended80_add,
        !          6634: 
        !          6635:   /* this does a unknown compliance extended80-precision sub: */
        !          6636:   _tme_ieee754_unknown_extended80_sub,
        !          6637: 
        !          6638:   /* this does a unknown compliance extended80-precision mul: */
        !          6639:   _tme_ieee754_unknown_extended80_mul,
        !          6640: 
        !          6641:   /* this does a unknown compliance extended80-precision div: */
        !          6642:   _tme_ieee754_unknown_extended80_div,
        !          6643: 
        !          6644:   /* this does a unknown compliance extended80-precision rem: */
        !          6645: #if (defined(TME_HAVE_INT64_T))
        !          6646:   _tme_ieee754_strict_extended80_rem,
        !          6647: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          6648:   NULL,
        !          6649: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          6650: 
        !          6651:   /* this does a unknown compliance extended80-precision sqrt: */
        !          6652:   _tme_ieee754_unknown_extended80_sqrt,
        !          6653: 
        !          6654:   /* this does a unknown compliance extended80-precision abs: */
        !          6655:   _tme_ieee754_unknown_extended80_abs,
        !          6656: 
        !          6657:   /* this does a unknown compliance extended80-precision neg: */
        !          6658:   _tme_ieee754_unknown_extended80_neg,
        !          6659: 
        !          6660:   /* this does a unknown compliance extended80-precision move: */
        !          6661:   _tme_ieee754_unknown_extended80_move,
        !          6662: 
        !          6663:   /* this does a unknown compliance extended80-precision rint: */
        !          6664: #if (defined(TME_HAVE_INT64_T))
        !          6665:   _tme_ieee754_strict_extended80_rint,
        !          6666: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          6667:   NULL,
        !          6668: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          6669: 
        !          6670:   /* this does a unknown compliance extended80-precision cos: */
        !          6671:   NULL,
        !          6672: 
        !          6673:   /* this does a unknown compliance extended80-precision acos: */
        !          6674:   NULL,
        !          6675: 
        !          6676:   /* this does a unknown compliance extended80-precision cosh: */
        !          6677:   NULL,
        !          6678: 
        !          6679:   /* this does a unknown compliance extended80-precision sin: */
        !          6680:   NULL,
        !          6681: 
        !          6682:   /* this does a unknown compliance extended80-precision asin: */
        !          6683:   NULL,
        !          6684: 
        !          6685:   /* this does a unknown compliance extended80-precision sinh: */
        !          6686:   NULL,
        !          6687: 
        !          6688:   /* this does a unknown compliance extended80-precision tan: */
        !          6689:   NULL,
        !          6690: 
        !          6691:   /* this does a unknown compliance extended80-precision atan: */
        !          6692:   NULL,
        !          6693: 
        !          6694:   /* this does a unknown compliance extended80-precision tanh: */
        !          6695:   NULL,
        !          6696: 
        !          6697:   /* this does a unknown compliance extended80-precision atanh: */
        !          6698:   NULL,
        !          6699: 
        !          6700:   /* this does a unknown compliance extended80-precision exp: */
        !          6701:   _tme_ieee754_unknown_extended80_exp,
        !          6702: 
        !          6703:   /* this does a unknown compliance extended80-precision expm1: */
        !          6704:   NULL,
        !          6705: 
        !          6706:   /* this does a unknown compliance extended80-precision log10: */
        !          6707:   _tme_ieee754_unknown_extended80_log10,
        !          6708: 
        !          6709:   /* this does a unknown compliance extended80-precision log: */
        !          6710:   _tme_ieee754_unknown_extended80_log,
        !          6711: 
        !          6712:   /* this does a unknown compliance extended80-precision log1p: */
        !          6713:   NULL,
        !          6714: 
        !          6715:   /* this does a unknown compliance extended80-precision getexp: */
        !          6716:   _tme_ieee754_strict_extended80_getexp,
        !          6717: 
        !          6718:   /* this does a unknown compliance extended80-precision getman: */
        !          6719:   _tme_ieee754_strict_extended80_getman,
        !          6720: 
        !          6721:   /* this does a unknown compliance extended80-precision scale: */
        !          6722:   _tme_ieee754_unknown_extended80_scale,
        !          6723: 
        !          6724:   /* this does a unknown compliance extended80-precision pow: */
        !          6725:   _tme_ieee754_unknown_extended80_pow,
        !          6726: 
        !          6727:   /* this does a unknown compliance extended80-precision from_single: */
        !          6728: #if (defined(TME_HAVE_INT64_T))
        !          6729:   _tme_ieee754_strict_extended80_from_single,
        !          6730: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          6731:   NULL,
        !          6732: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          6733: 
        !          6734:   /* this does a unknown compliance extended80-precision from_double: */
        !          6735: #if (defined(TME_HAVE_INT64_T))
        !          6736:   _tme_ieee754_strict_extended80_from_double,
        !          6737: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          6738:   NULL,
        !          6739: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          6740: 
        !          6741:   /* this does a unknown compliance extended80-precision from_quad: */
        !          6742: #if (defined(TME_HAVE_INT64_T))
        !          6743:   _tme_ieee754_strict_extended80_from_quad,
        !          6744: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          6745:   NULL,
        !          6746: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          6747: 
        !          6748:   /* this does a unknown compliance extended80-precision to_int32: */
        !          6749:   _tme_ieee754_strict_extended80_to_int32,
        !          6750: 
        !          6751:   /* this does a unknown compliance extended80-precision to_int64: */
        !          6752:   NULL,
        !          6753: 
        !          6754:   /* this does a unknown compliance quad-precision add: */
        !          6755:   _tme_ieee754_unknown_quad_add,
        !          6756: 
        !          6757:   /* this does a unknown compliance quad-precision sub: */
        !          6758:   _tme_ieee754_unknown_quad_sub,
        !          6759: 
        !          6760:   /* this does a unknown compliance quad-precision mul: */
        !          6761:   _tme_ieee754_unknown_quad_mul,
        !          6762: 
        !          6763:   /* this does a unknown compliance quad-precision div: */
        !          6764:   _tme_ieee754_unknown_quad_div,
        !          6765: 
        !          6766:   /* this does a unknown compliance quad-precision rem: */
        !          6767: #if (defined(TME_HAVE_INT64_T))
        !          6768:   _tme_ieee754_strict_quad_rem,
        !          6769: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          6770:   NULL,
        !          6771: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          6772: 
        !          6773:   /* this does a unknown compliance quad-precision sqrt: */
        !          6774:   _tme_ieee754_unknown_quad_sqrt,
        !          6775: 
        !          6776:   /* this does a unknown compliance quad-precision abs: */
        !          6777:   _tme_ieee754_unknown_quad_abs,
        !          6778: 
        !          6779:   /* this does a unknown compliance quad-precision neg: */
        !          6780:   _tme_ieee754_unknown_quad_neg,
        !          6781: 
        !          6782:   /* this does a unknown compliance quad-precision move: */
        !          6783:   _tme_ieee754_unknown_quad_move,
        !          6784: 
        !          6785:   /* this does a unknown compliance quad-precision rint: */
        !          6786: #if (defined(TME_HAVE_INT64_T))
        !          6787:   _tme_ieee754_strict_quad_rint,
        !          6788: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          6789:   NULL,
        !          6790: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          6791: 
        !          6792:   /* this does a unknown compliance quad-precision cos: */
        !          6793:   NULL,
        !          6794: 
        !          6795:   /* this does a unknown compliance quad-precision acos: */
        !          6796:   NULL,
        !          6797: 
        !          6798:   /* this does a unknown compliance quad-precision cosh: */
        !          6799:   NULL,
        !          6800: 
        !          6801:   /* this does a unknown compliance quad-precision sin: */
        !          6802:   NULL,
        !          6803: 
        !          6804:   /* this does a unknown compliance quad-precision asin: */
        !          6805:   NULL,
        !          6806: 
        !          6807:   /* this does a unknown compliance quad-precision sinh: */
        !          6808:   NULL,
        !          6809: 
        !          6810:   /* this does a unknown compliance quad-precision tan: */
        !          6811:   NULL,
        !          6812: 
        !          6813:   /* this does a unknown compliance quad-precision atan: */
        !          6814:   NULL,
        !          6815: 
        !          6816:   /* this does a unknown compliance quad-precision tanh: */
        !          6817:   NULL,
        !          6818: 
        !          6819:   /* this does a unknown compliance quad-precision atanh: */
        !          6820:   NULL,
        !          6821: 
        !          6822:   /* this does a unknown compliance quad-precision exp: */
        !          6823:   _tme_ieee754_unknown_quad_exp,
        !          6824: 
        !          6825:   /* this does a unknown compliance quad-precision expm1: */
        !          6826:   NULL,
        !          6827: 
        !          6828:   /* this does a unknown compliance quad-precision log10: */
        !          6829:   _tme_ieee754_unknown_quad_log10,
        !          6830: 
        !          6831:   /* this does a unknown compliance quad-precision log: */
        !          6832:   _tme_ieee754_unknown_quad_log,
        !          6833: 
        !          6834:   /* this does a unknown compliance quad-precision log1p: */
        !          6835:   NULL,
        !          6836: 
        !          6837:   /* this does a unknown compliance quad-precision getexp: */
        !          6838:   _tme_ieee754_strict_quad_getexp,
        !          6839: 
        !          6840:   /* this does a unknown compliance quad-precision getman: */
        !          6841:   _tme_ieee754_strict_quad_getman,
        !          6842: 
        !          6843:   /* this does a unknown compliance quad-precision scale: */
        !          6844:   _tme_ieee754_unknown_quad_scale,
        !          6845: 
        !          6846:   /* this does a unknown compliance quad-precision pow: */
        !          6847:   _tme_ieee754_unknown_quad_pow,
        !          6848: 
        !          6849:   /* this does a unknown compliance quad-precision from_single: */
        !          6850: #if (defined(TME_HAVE_INT64_T))
        !          6851:   _tme_ieee754_strict_quad_from_single,
        !          6852: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          6853:   NULL,
        !          6854: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          6855: 
        !          6856:   /* this does a unknown compliance quad-precision from_double: */
        !          6857: #if (defined(TME_HAVE_INT64_T))
        !          6858:   _tme_ieee754_strict_quad_from_double,
        !          6859: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          6860:   NULL,
        !          6861: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          6862: 
        !          6863:   /* this does a unknown compliance quad-precision from_extended80: */
        !          6864: #if (defined(TME_HAVE_INT64_T))
        !          6865:   _tme_ieee754_strict_quad_from_extended80,
        !          6866: #else  /* !(defined(TME_HAVE_INT64_T)) */
        !          6867:   NULL,
        !          6868: #endif /* !(defined(TME_HAVE_INT64_T)) */
        !          6869: 
        !          6870:   /* this does a unknown compliance quad-precision to_int32: */
        !          6871:   _tme_ieee754_strict_quad_to_int32,
        !          6872: 
        !          6873:   /* this does a unknown compliance quad-precision to_int64: */
        !          6874:   NULL,
        !          6875: };
        !          6876: 
        !          6877: /* this looks up an operations structure: */
        !          6878: const struct tme_ieee754_ops *
        !          6879: tme_ieee754_ops_lookup(const char *compliance)
        !          6880: {
        !          6881: 
        !          6882:   if (TME_ARG_IS(compliance, "strict")) { 
        !          6883:     return (&tme_ieee754_ops_strict);
        !          6884:   }
        !          6885:   if (TME_ARG_IS(compliance, "partial")) { 
        !          6886:     return (&tme_ieee754_ops_partial);
        !          6887:   }
        !          6888:   if (TME_ARG_IS(compliance, "unknown")) { 
        !          6889:     return (&tme_ieee754_ops_unknown);
        !          6890:   }
        !          6891:   return (NULL);
        !          6892: }
        !          6893: 
        !          6894: /* this is a compliance options string: */
        !          6895: const char * const tme_ieee754_compliance_options = "{ strict | partial | unknown }";

unix.superglobalmegacorp.com

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