// Value Tagging
//---------------------------------------------------------------------
-.set IMM_BITS_BITMASK, $0x3
-.set IMM_BITS_FIXNUM, $0x1
-.set IMM_BITS_CHARACTER, $0x2
-
-.set OBJ_PRIMITIVE, $0x000000000000000
-.set OBJ_BOOLEAN, $0x100000000000000
-.set OBJ_TRUE, $0x100000000000004
-.set OBJ_FALSE, $0x100000000000000
-.set OBJ_NULL, $0x200000000000000
-.set OBJ_PAIR, $0x300000000000000
-.set OBJ_FLONUM, $0x400000000000000
-.set OBJ_SYMBOL, $0x500000000000000
-.set OBJ_STRING, $0x600000000000000
-.set OBJ_VECTOR, $0x700000000000000
-.set OBJ_PORT, $0x800000000000000
-.set OBJ_CLOSURE, $0x900000000000000
-.set OBJ_RESERVED1, $0xA00000000000000
-.set OBJ_RESERVED2, $0xB00000000000000
-.set OBJ_RESERVED3, $0xC00000000000000
-.set OBJ_RESERVED4, $0xD00000000000000
-.set OBJ_RESERVED5, $0xE00000000000000
-.set OBJ_BITMASK, $0xF00000000000003
-.set OBJ_VALUE_MASK, $0x0FFFFFFFFFFFFFC
+.set IMM_BITS_BITMASK, 0x3
+.set IMM_BITS_FIXNUM, 0x1
+.set IMM_BITS_CHARACTER, 0x2
+
+.set OBJ_PRIMITIVE, 0x000000000000000
+.set OBJ_BOOLEAN, 0x100000000000000
+.set OBJ_TRUE, 0x100000000000004
+.set OBJ_FALSE, 0x100000000000000
+.set OBJ_NULL, 0x200000000000000
+.set OBJ_PAIR, 0x300000000000000
+.set OBJ_FLONUM, 0x400000000000000
+.set OBJ_SYMBOL, 0x500000000000000
+.set OBJ_STRING, 0x600000000000000
+.set OBJ_VECTOR, 0x700000000000000
+.set OBJ_PORT, 0x800000000000000
+.set OBJ_CLOSURE, 0x900000000000000
+.set OBJ_RESERVED1, 0xA00000000000000
+.set OBJ_RESERVED2, 0xB00000000000000
+.set OBJ_RESERVED3, 0xC00000000000000
+.set OBJ_RESERVED4, 0xD00000000000000
+.set OBJ_RESERVED5, 0xE00000000000000
+.set OBJ_BITMASK, 0xF00000000000003
+.set OBJ_VALUE_MASK, 0x0FFFFFFFFFFFFFC
//---------------------------------------------------------------------
// Main Routine
NEXT
//---------------------------------------------------------------------
-// Primitive Definitions
+// Scaffolding Primitives
//---------------------------------------------------------------------
// Exit the application
pushq T1
NEXT
-// Pushes an immediate value onto the stack
-defcode OP_imm
- lodsq
- pushq AC
- NEXT
-
// Duplicates the top value on the stack
defcode OP_dup
movq (SP), AC
movq T1, (FP, AC, 8)
NEXT
+//---------------------------------------------------------------------
+// Immediate Value Primitives
+//---------------------------------------------------------------------
+
+// Pushes an immediate value onto the stack
+defcode OP_imm
+ lodsq
+ pushq AC
+ NEXT
+
+// Pushes a "true" value onto the stack
+defcode OP_true
+ movabsq OBJ_TRUE, AC
+ pushq AC
+ NEXT
+
+// Pushes a "false" value onto the stack
+defcode OP_false
+ movabsq OBJ_FALSE, AC
+ pushq AC
+ NEXT
+
+// Pushes a "null" value onto the stack
+defcode OP_null
+ movabsq OBJ_NULL, AC
+ pushq AC
+ NEXT
+
+//---------------------------------------------------------------------
+// Predicate Primitives
+//---------------------------------------------------------------------
+
+
//---------------------------------------------------------------------
// Main Routine
//---------------------------------------------------------------------