023-cmpd-simple.scm (726B)
1 ;; tests/cc-cg/23-cmpd-simple.scm — compound assignment on simple lval (§B.3). 2 ;; 3 ;; Models: int x = 7; x += 3; return x; → exit 10. 4 5 (let ((cg (cg-init))) 6 (cg-fn-begin cg "main" '() %t-i32) 7 (let* ((off-x (cg-alloc-slot cg 4 4)) 8 (sym-x (%sym "x" 'var 'auto %t-i32 off-x))) 9 ;; x = 7 10 (cg-push-sym cg sym-x) 11 (cg-push-imm cg %t-i32 7) 12 (cg-assign cg) (cg-pop cg) 13 ;; x += 3: push lval; dup; load; push 3; add; assign; pop 14 (cg-push-sym cg sym-x) 15 (cg-dup cg) 16 (cg-load cg) 17 (cg-push-imm cg %t-i32 3) 18 (cg-binop cg 'add) 19 (cg-assign cg) (cg-pop cg) 20 ;; return x 21 (cg-push-sym cg sym-x) (cg-load cg) 22 (cg-return cg)) 23 (cg-fn-end cg) 24 (write-bv-fd 1 (cg-finish cg)))