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
|
# mach: all
# output:
# sim: --environment operating
.include "t-macros.i"
start
;; The d10v implements negated addition for subtraction
.macro check_sub2w s x y r c v
;; clear carry
ldi r6,#0x8004
mvtc r6,cr0
;; load opnds
ld2w r6, @(1f,r0)
ld2w r8, @(2f,r0)
.data
1: .long \x
2: .long \y
.text
;; subtract
SUB2W r6, r8
;; verify result
ld2w r10, @(1f,r0)
.data
1: .long \r
.text
cmpeq r6, r10
brf0f 2f
cmpeq r7, r11
brf0t 3f
2: ldi r4, 1
ldi r0, \s
trap 15
3:
;; verify carry
mvfc r6, cr0
and3 r6, r6, #1
cmpeqi r6, #\c
brf0t 1f
ldi r4, 1
ldi r0, \s
trap 15
1:
.endm
check_sub2w 1 0x00000000 0x00000000 0x00000000 1 0
check_sub2w 2 0x00000000 0x00000001 0xffffffff 0 0
check_sub2w 3 0x00000001 0x00000000 0x00000001 1 0
check_sub2w 3 0x00000001 0x00000001 0x00000000 1 0
check_sub2w 5 0x00000000 0x80000000 0x80000000 0 1
check_sub2w 6 0x80000000 0x00000001 0x7fffffff 1 1
check_sub2w 7 0x7fffffff 0x7fffffff 0x00000000 1 0
exit0
|