+ break;
+ case SIZQ:
+ // 64-bit size
+ if (m6502)
+ return error(in_6502mode);
+
+ // Shamus: We only handle DC.Q type stuff, will have to add fixups
+ // and stuff later (maybe... might not be needed...)
+ D_quad(eval);
+ break;
+ case SIZS:
+ // 32-bit float size
+ if (m6502)
+ return error(in_6502mode);
+
+ if (!defined)
+ {
+ AddFixup(FU_FLOATSING, sloc, exprbuf);
+ D_long(0);
+ }
+ else
+ {
+ if (tdb)
+ MarkRelocatable(cursect, sloc, tdb, MSINGLE, NULL);
+
+ PTR ptr;
+ ptr.u64 = &eval;
+ uint32_t ieee754 = FloatToIEEE754((float)*ptr.dp);
+ D_long(ieee754);
+ }
+
+ break;
+ case SIZD:
+ // 64-bit double size
+ if (m6502)
+ return error(in_6502mode);
+
+ if (!defined)
+ {
+ AddFixup(FU_FLOATDOUB, sloc, exprbuf);
+ D_quad(0LL);
+ }
+ else
+ {
+ if (tdb)
+ MarkRelocatable(cursect, sloc, tdb, MDOUBLE, NULL);
+
+ PTR ptr;
+ ptr.u64 = &eval;
+ uint64_t ieee754 = DoubleToIEEE754(*ptr.dp);
+ D_quad(ieee754);
+ }
+
+ break;
+ case SIZX:
+ if (m6502)
+ return error(in_6502mode);
+
+ uint8_t extDbl[12];
+ memset(extDbl, 0, 12);
+
+ if (!defined)
+ {
+ AddFixup(FU_FLOATEXT, sloc, exprbuf);
+ D_extend(extDbl);
+ }
+ else
+ {
+ if (tdb)
+ MarkRelocatable(cursect, sloc, tdb, MEXTEND, NULL);
+
+ PTR ptr;
+ ptr.u64 = &eval;
+ DoubleToExtended(*ptr.dp, extDbl);
+ D_extend(extDbl);
+ }
+