1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
# fr30 testcase for call @$Ri
# mach(): fr30
.include "testutils.inc"
START
.text
.global call
; Test call $Ri
mvi_h_gr 0xdeadbeef,r9
mvi_h_gr #func1,r0
set_cc 0x0f ; condition codes shouldn't change
call1:
call @r0
test_h_gr 0xbeefdead,r9
pass
func1:
test_cc 1 1 1 1
mvi_h_gr #call1,r7
inci_h_gr 2,r7
testr_h_dr r7,rp
save_rp
mvi_h_gr #func2,r0
set_cc 0x0f ; condition codes shouldn't change
call2:
call:d @r0
ldi:8 1,r0 ; Must assume this works
restore_rp
ret
func2:
test_cc 1 1 1 1
mvi_h_gr #call2,r7
inci_h_gr 4,r7
testr_h_dr r7,rp
testr_h_gr 1,r0
save_rp
set_cc 0x0f ; condition codes shouldn't change
call3:
call func3
restore_rp
ret
func3:
test_cc 1 1 1 1
mvi_h_gr #call3,r7
inci_h_gr 2,r7
testr_h_dr r7,rp
save_rp
set_cc 0x0f ; condition codes shouldn't change
call4:
call:d func4
ldi:8 1,r0 ; Must assume this works
restore_rp
ret
func4:
test_cc 1 1 1 1
mvi_h_gr #call4,r7
inci_h_gr 4,r7
testr_h_dr r7,rp
testr_h_gr 1,r0
mvi_h_gr 0xbeefdead,r9
ret
fail
|