+
+ case SIZS:
+ // 68881/68882/68040 only
+ if (w)
+ {
+//Would a floating point value *ever* need to be fixed up as if it were an address? :-P
+// if (tdb)
+// MarkRelocatable(cursect, sloc, tdb, MSINGLE, NULL);
+
+ // The value passed back from expr() is an internal C double;
+ // so we have to access it as such then convert it to an
+ // IEEE-754 float so we can store it as such in the instruction
+ // stream here.
+ PTR p;
+ p.u64 = &aNexval;
+ float f = (float)*p.dp;
+ uint32_t ieee754 = FloatToIEEE754(f);
+ D_long(ieee754);
+ }
+ else
+ {
+ AddFixup(FU_FLOATSING, sloc, aNexpr);
+ D_long(0); // IEEE-754 zero is all zeroes
+ }
+
+ break;
+
+ case SIZD:
+ // 68881/68882/68040 only
+ if (w)
+ {
+//Would a floating point value *ever* need to be fixed up as if it were an address? :-P
+// if (tdb)
+// MarkRelocatable(cursect, sloc, tdb, MDOUBLE, NULL);
+
+ PTR p;
+ p.u64 = &aNexval;
+ double d = *p.dp;
+ uint64_t ieee754 = DoubleToIEEE754(d);
+ D_quad(ieee754);
+ }
+ else
+ {
+ AddFixup(FU_FLOATDOUB, sloc, aNexpr);
+ D_quad(0LL); // IEEE-754 zero is all zeroes
+ }
+
+ break;
+
+ case SIZX:
+ // 68881/68882/68040 only
+ if (w)
+ {
+//Would a floating point value *ever* need to be fixed up as if it were an address? :-P
+// if (tdb)
+// MarkRelocatable(cursect, sloc, tdb, MEXTEND, NULL);
+
+ PTR p;
+ p.u64 = &aNexval;
+ DoubleToExtended(*p.dp, extDbl);
+ D_extend(extDbl);
+ }
+ else
+ {
+ // Why would this be anything other than a floating point
+ // expression??? Even if there were an undefined symbol in
+ // the expression, how would that be relevant? I can't see
+ // any use case where this would make sense.
+ AddFixup(FU_FLOATDOUB, sloc, aNexpr);
+ memset(extDbl, 0, 12);
+ D_extend(extDbl);
+ }
+
+ break;
+