Skip to content

Commit 321e76f

Browse files
committed
Drop defined multipliers and use stdlib instead.
1 parent 2711f9f commit 321e76f

6 files changed

Lines changed: 40 additions & 79 deletions

File tree

langs/outlaw/compile-define.rkt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,11 @@
5353
(seq (Label (symbol->label f))
5454
(Cmp r15 (length xs))
5555
(Jne 'raise_error_align)
56-
(Mov rax (Offset rsp (*8 (length xs))))
56+
(Mov rax (Offset rsp (* 8 (length xs))))
5757
(Xor rax type-proc)
5858
(copy-env-to-stack fvs 8)
5959
(compile-e e env g #t)
60-
(Add rsp (*8 (length env))) ; pop env
60+
(Add rsp (* 8 (length env))) ; pop env
6161
(Ret)))]
6262
[(LamRest f xs x e)
6363
(let ((env (append (reverse fvs) (cons x (reverse xs)) (list #f))))
@@ -83,11 +83,11 @@
8383
(Label done)))
8484
(Push rax)
8585

86-
(Mov rax (Offset rsp (*8 (add1 (length xs)))))
86+
(Mov rax (Offset rsp (* 8 (add1 (length xs)))))
8787
(Xor rax type-proc)
8888
(copy-env-to-stack fvs 8)
8989
(compile-e e env g #t)
90-
(Add rsp (*8 (length env))) ; pop env
90+
(Add rsp (* 8 (length env))) ; pop env
9191
(Ret)))]
9292
[(LamCase f cs)
9393
(seq ; (%%% "lamcase code")

langs/outlaw/compile-expr.rkt

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
(define (compile-let xs es e c g t?)
7070
(seq (compile-es es c g)
7171
(compile-e e (append (reverse xs) c) g t?)
72-
(Add rsp (*8 (length xs)))))
72+
(Add rsp (* 8 (length xs)))))
7373

7474
;; Id [Listof Expr] CEnv GEnv Bool -> Asm
7575
(define (compile-app f es c g t?)
@@ -83,8 +83,8 @@
8383
(define (compile-app-tail e es c g)
8484
(seq (compile-es (cons e es) c g)
8585
(move-args (add1 (length es)) (length c))
86-
(Add rsp (*8 (length c)))
87-
(Mov rax (Offset rsp (*8 (length es))))
86+
(Add rsp (* 8 (length c)))
87+
(Mov rax (Offset rsp (* 8 (length es))))
8888
(assert-proc rax)
8989
(Xor rax type-proc)
9090
(Mov rax (Offset rax 0))
@@ -95,16 +95,16 @@
9595
(cond [(zero? off) (seq)]
9696
[(zero? i) (seq)]
9797
[else
98-
(seq (Mov r8 (Offset rsp (*8 (sub1 i))))
99-
(Mov (Offset rsp (*8 (+ off (sub1 i)))) r8)
98+
(seq (Mov r8 (Offset rsp (* 8 (sub1 i))))
99+
(Mov (Offset rsp (* 8 (+ off (sub1 i)))) r8)
100100
(move-args (sub1 i) off))]))
101101

102102
;; Expr [Listof Expr] CEnv GEnv -> Asm
103103
;; The return address is placed above the arguments, so callee pops
104104
;; arguments and return address is next frame
105105
(define (compile-app-nontail e es c g)
106106
(let ((r (gensym 'ret))
107-
(i (*8 (length es))))
107+
(i (* 8 (length es))))
108108
(seq (Lea rax r)
109109
(Push rax)
110110
(compile-es (cons e es) (cons #f c) g)
@@ -125,7 +125,7 @@
125125
(compile-es (cons e es) (cons #f c) g)
126126
(compile-e el (append (make-list (add1 (length es)) #f) (cons #f c)) g #f)
127127

128-
(Mov r10 (Offset rsp (*8 (length es))))
128+
(Mov r10 (Offset rsp (* 8 (length es))))
129129

130130
(Mov r15 (length es))
131131
(let ((loop (gensym))
@@ -158,7 +158,7 @@
158158
(free-vars-to-heap fvs c 8)
159159
(Mov rax rbx) ; return value
160160
(Or rax type-proc)
161-
(Add rbx (*8 (add1 (length fvs)))))))
161+
(Add rbx (* 8 (add1 (length fvs)))))))
162162

163163
;; Lambda -> Id
164164
(define (lambda-name l)
@@ -237,7 +237,7 @@
237237
(seq (Mov rax (Offset rsp 0)) ; restore value being matched
238238
i
239239
(compile-e e (append cm c) g t?)
240-
(Add rsp (*8 (length cm)))
240+
(Add rsp (* 8 (length cm)))
241241
(Jmp done)
242242
f
243243
(Label next))])))
@@ -266,7 +266,7 @@
266266
(Cmp rax 0)
267267
(Jne fail))
268268
(seq (Label fail)
269-
(Add rsp (*8 (length cm)))
269+
(Add rsp (* 8 (length cm)))
270270
(Jmp next))
271271
cm))]
272272
[(PSymb s)
@@ -275,15 +275,15 @@
275275
(Cmp rax r9)
276276
(Jne fail))
277277
(seq (Label fail)
278-
(Add rsp (*8 (length cm)))
278+
(Add rsp (* 8 (length cm)))
279279
(Jmp next))
280280
cm))]
281281
[(PLit l)
282282
(let ((fail (gensym)))
283283
(list (seq (Cmp rax (imm->bits l))
284284
(Jne fail))
285285
(seq (Label fail)
286-
(Add rsp (*8 (length cm)))
286+
(Add rsp (* 8 (length cm)))
287287
(Jmp next))
288288
cm))]
289289
[(PAnd p1 p2)
@@ -294,7 +294,7 @@
294294
(list
295295
(seq (Push rax)
296296
i1
297-
(Mov rax (Offset rsp (*8 (- (sub1 (length cm1)) (length cm)))))
297+
(Mov rax (Offset rsp (* 8 (- (sub1 (length cm1)) (length cm)))))
298298
i2)
299299
(seq f1 f2)
300300
cm2)])])]
@@ -312,7 +312,7 @@
312312
i1)
313313
(seq f1
314314
(Label fail)
315-
(Add rsp (*8 (length cm))) ; haven't pushed anything yet
315+
(Add rsp (* 8 (length cm))) ; haven't pushed anything yet
316316
(Jmp next))
317317
cm1))])]
318318
[(PCons p1 p2)
@@ -331,12 +331,12 @@
331331
(Push r8) ; push cdr
332332
(Mov rax (Offset rax 8)) ; mov rax car
333333
i1
334-
(Mov rax (Offset rsp (*8 (- (sub1 (length cm1)) (length cm)))))
334+
(Mov rax (Offset rsp (* 8 (- (sub1 (length cm1)) (length cm)))))
335335
i2)
336336
(seq f1
337337
f2
338338
(Label fail)
339-
(Add rsp (*8 (length cm))) ; haven't pushed anything yet
339+
(Add rsp (* 8 (length cm))) ; haven't pushed anything yet
340340
(Jmp next))
341341
cm2))])])]
342342
[(PStruct n ps)
@@ -357,7 +357,7 @@
357357
i)
358358
(seq f
359359
(Label fail)
360-
(Add rsp (*8 (length cm)))
360+
(Add rsp (* 8 (length cm)))
361361
(Jmp next))
362362
cm1))])]
363363

@@ -382,7 +382,7 @@
382382
(Cmp rax val-false)
383383
(Je fail)))
384384
(seq (Label fail)
385-
(Add rsp (*8 (length cm)))
385+
(Add rsp (* 8 (length cm)))
386386
(Jmp next))
387387
cm))]))
388388

@@ -399,9 +399,9 @@
399399
(match (compile-struct-patterns ps c g cm1 next (add1 i) cm0-len)
400400
[(list is fs cmn)
401401
(list
402-
(seq (Mov rax (Offset rax (*8 i)))
402+
(seq (Mov rax (Offset rax (* 8 i)))
403403
i1
404-
(Mov rax (Offset rsp (*8 (- (length cm1) cm0-len))))
404+
(Mov rax (Offset rsp (* 8 (- (length cm1) cm0-len))))
405405
is)
406406
(seq f1 fs)
407407
cmn)])])]))

langs/outlaw/compile-ops.rkt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -467,14 +467,14 @@
467467
(seq (compile-make-struct/a n 1)
468468
(Mov rax rbx)
469469
(Or rax type-struct)
470-
(Add rbx (*8 n))))
470+
(Add rbx (* 8 n))))
471471

472472
;; Nat Nat -> Asm
473473
;; Pop elements off stack, writing them to heap
474474
(define (compile-make-struct/a n i)
475475
(if (= n i)
476-
(seq (Mov (Offset rbx (*8 (- n i))) rax))
477-
(seq (Mov (Offset rbx (*8 (- n i))) rax)
476+
(seq (Mov (Offset rbx (* 8 (- n i))) rax))
477+
(seq (Mov (Offset rbx (* 8 (- n i))) rax)
478478
(Pop rax)
479479
(compile-make-struct/a n (add1 i)))))
480480

langs/outlaw/read-port.rkt

Lines changed: 6 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -815,28 +815,28 @@
815815
['() 0]
816816
[(cons d ds)
817817
(+ (char-digit->number d)
818-
(*2 (char-digit2s->number ds)))]))
818+
(* 2 (char-digit2s->number ds)))]))
819819

820820
(define (char-digit8s->number ds)
821821
(match ds
822822
['() 0]
823823
[(cons d ds)
824824
(+ (char-digit->number d)
825-
(*8 (char-digit8s->number ds)))]))
825+
(* 8 (char-digit8s->number ds)))]))
826826

827827
(define (char-digit10s->number ds)
828828
(match ds
829829
['() 0]
830830
[(cons d ds)
831831
(+ (char-digit->number d)
832-
(*10 (char-digit10s->number ds)))]))
832+
(* 10 (char-digit10s->number ds)))]))
833833

834834
(define (char-digit16s->number ds)
835835
(match ds
836836
['() 0]
837837
[(cons d ds)
838838
(+ (char-digit16->number d)
839-
(*16 (char-digit16s->number ds)))]))
839+
(* 16 (char-digit16s->number ds)))]))
840840

841841
(define (char-digit->number d)
842842
(- (char->integer d)
@@ -871,8 +871,8 @@
871871
[(<= 97 x 102) (- x 87)])))
872872

873873
(define (octal-char d1 d2 d3)
874-
(let ((x (+ (*64 (char-digit8->number d1))
875-
(*8 (char-digit8->number d2))
874+
(let ((x (+ (* 64 (char-digit8->number d1))
875+
(* 8 (char-digit8->number d2))
876876
(char-digit8->number d3))))
877877
(if (<= 0 x 255)
878878
(integer->char x)
@@ -1026,22 +1026,3 @@
10261026
(define (unimplemented x)
10271027
(err #f (string-append "unimplemented: " x)))
10281028

1029-
1030-
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1031-
;; Multipliers
1032-
1033-
(define (*2 a)
1034-
(arithmetic-shift a 1))
1035-
1036-
(define (*8 a)
1037-
(arithmetic-shift a 3))
1038-
1039-
(define (*16 a)
1040-
(arithmetic-shift a 4))
1041-
1042-
(define (*10 a) ; 10a=2^3a+2a
1043-
(+ (arithmetic-shift a 1)
1044-
(arithmetic-shift a 3)))
1045-
1046-
(define (*64 a)
1047-
(arithmetic-shift a 6))

langs/outlaw/read.rkt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -508,28 +508,28 @@
508508
['() 0]
509509
[(cons d ds)
510510
(+ (char-digit->number d)
511-
(*2 (char-digit2s->number ds)))]))
511+
(* 2 (char-digit2s->number ds)))]))
512512

513513
(define (char-digit8s->number ds)
514514
(match ds
515515
['() 0]
516516
[(cons d ds)
517517
(+ (char-digit->number d)
518-
(*8 (char-digit8s->number ds)))]))
518+
(* 8 (char-digit8s->number ds)))]))
519519

520520
(define (char-digit10s->number ds)
521521
(match ds
522522
['() 0]
523523
[(cons d ds)
524524
(+ (char-digit->number d)
525-
(*10 (char-digit10s->number ds)))]))
525+
(* 10 (char-digit10s->number ds)))]))
526526

527527
(define (char-digit16s->number ds)
528528
(match ds
529529
['() 0]
530530
[(cons d ds)
531531
(+ (char-digit16->number d)
532-
(*16 (char-digit16s->number ds)))]))
532+
(* 16 (char-digit16s->number ds)))]))
533533

534534
(define (char-digit->number d)
535535
(- (char->integer d)
@@ -565,8 +565,8 @@
565565
[else (error "bad char-digit16")])))
566566

567567
(define (octal-char d1 d2 d3)
568-
(let ((x (+ (*64 (char-digit8->number d1))
569-
(*8 (char-digit8->number d2))
568+
(let ((x (+ (* 64 (char-digit8->number d1))
569+
(* 8 (char-digit8->number d2))
570570
(char-digit8->number d3))))
571571
(if (<= 0 x 255)
572572
(integer->char x)

langs/outlaw/utils.rkt

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#lang racket
2-
(provide symbol->label symbol->data-label lookup pad-stack unpad-stack *2 *8 *10 *16 *64)
2+
(provide symbol->label symbol->data-label lookup pad-stack unpad-stack)
33
(require "a86/ast.rkt" "registers.rkt")
44

55
;; Symbol -> Label
@@ -46,23 +46,3 @@
4646
;; Undo the stack alignment after a call
4747
(define (unpad-stack)
4848
(seq (Add rsp r15)))
49-
50-
51-
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
52-
;; Multipliers
53-
54-
(define (*2 a)
55-
(arithmetic-shift a 1))
56-
57-
(define (*8 a)
58-
(arithmetic-shift a 3))
59-
60-
(define (*16 a)
61-
(arithmetic-shift a 4))
62-
63-
(define (*10 a) ; 10a=2^3a+2a
64-
(+ (arithmetic-shift a 1)
65-
(arithmetic-shift a 3)))
66-
67-
(define (*64 a)
68-
(arithmetic-shift a 6))

0 commit comments

Comments
 (0)