Shave four bytes

This commit is contained in:
Justine Tunney 2022-01-11 19:22:14 -08:00
parent a6836ede0f
commit b2d4ef9960

View file

@ -174,6 +174,27 @@ Cons: xchg %di,%cx # Cons(m:di,a:ax):ax
.RetDi: xchg %di,%ax
ret
Builtin:cmp $kAtom,%ax # atom: last builtin atom
ja .resolv # ah is zero if not above
mov (%si),%di # di = Car(x)
je .ifAtom
cmp $kPrint,%al
je .ifPrint
cmp $kRead,%al
je .ifRead
cmp $kCons,%al
jae .ifCons
.ifCar: cmp $kCar,%al
je Car
.ifCdr: jmp Cdr
.ifCons:mov (%bx,%si),%si # si = Cdr(x)
lodsw # si = Cadr(x)
je Cons
.isEq: xor %di,%ax
jne .retF
.retT: mov $kT,%al
ret
GetList:call GetToken
cmp $')',%al
je .retF
@ -200,7 +221,7 @@ Gc: cmp %dx,%di # Gc(x:di,A:dx,B:si):ax
call Assoc # do (fn si) ((λ ...) si)
pop %si
Apply: test %ax,%ax # Apply(fn:ax,x:si:a:dx):ax
jns .switch # jump if atom
jns Builtin # jump if atom
xchg %ax,%di # di = fn
.lambda:mov (%bx,%di),%di # di = Cdr(fn)
push %di # for .EvCadr
@ -218,26 +239,6 @@ Pairlis:test %di,%di # Pairlis(x:di,y:si,a:dx):dx
xchg %ax,%dx # a = new list
pop %di # grab Cdr(x)
jmp Pairlis
.switch:cmp $kAtom,%ax # atom: last builtin atom
ja .resolv # ah is zero if not above
mov (%si),%di # di = Car(x)
je .ifAtom
cmp $kPrint,%al
je .ifPrint
cmp $kRead,%al
je .ifRead
cmp $kCons,%al
jae .ifCons
.ifCar: cmp $kCar,%al
je Car
.ifCdr: jmp Cdr
.ifCons:mov (%bx,%si),%si # si = Cdr(x)
lodsw # si = Cadr(x)
je Cons
.isEq: xor %di,%ax
jne .retF
.retT: mov $kT,%al
ret
.ifAtom:test %di,%di # test if atom
jns .retT
.retF: xor %ax,%ax # ax = nil