- if (space < 0) {
- mod_internal (-space, "inc", "addy");
- } else if (space > 0) {
- mod_internal (space, "dec", "suby");
+ if (Space < 0) {
+ /* This is actually a drop operation */
+ g_drop (-Space);
+ } else if (Space > 255) {
+ /* Inline the code since calling subysp repeatedly is quite some
+ * overhead.
+ */
+ AddCodeLine ("pha");
+ AddCodeLine ("lda sp");
+ AddCodeLine ("sec");
+ AddCodeLine ("sbc #$%02X", (unsigned char) Space);
+ AddCodeLine ("sta sp");
+ AddCodeLine ("lda sp+1");
+ AddCodeLine ("sbc #$%02X", (unsigned char) (Space >> 8));
+ AddCodeLine ("sta sp+1");
+ AddCodeLine ("pla");
+ } else if (Space > 8) {
+ AddCodeLine ("ldy #$%02X", Space);
+ AddCodeLine ("jsr subysp");
+ } else if (Space != 0) {
+ AddCodeLine ("jsr decsp%u", Space);