ack/lang/occam/lib/par_em4.e
2007-02-25 22:49:23 +00:00

47 lines
978 B
Plaintext

mes 2,4,4
exp $top_size
pro $top_size, 20
lol 0 ; s_brk
lor 1 ; s_brk SP
sbs 4 ; s_brk-SP
ret 4 ; return size of block to be saved
end 20
exp $top_save
pro $top_save, 0
lde 0 ; load line number and file name
lim ; ignore mask
lor 0 ; LB
lol 0 ; size of block
lor 1 ; SP (the SP BEFORE pushing)
lor 1 ; SP (address of stack top to save)
lol 4 ; area
lol 0 ; size
bls 4 ; move whole block
asp 24 ; remove the lot from the stack
loc 1
ret 4 ; return 1
end 0
exp $top_load
pro $top_load, 0
lol 0
dup 4
ste area ; copy area pointer from argument 0
loi 4 ; load indirect to
str 1 ; restore sp
loe area ; load area, note that the SP is now correct
lor 1 ; SP (the SP AFTER, see above)
loe area
lof 4 ; size of block
bls 4 ; move block back (SP becomes the SP BEFORE again!)
asp 4 ; drop size
str 0 ; LB
sim ; ignore mask
sde 0 ; line and file
loc 0
ret 4 ; return 0
end 0
area
bss 4,0,0