daily update
[external/binutils.git] / sim / testsuite / sim / frv / mcpxrs.cgs
1 # frv testcase for mcpxrs $GRi,$GRj,$ACCk
2 # mach: all
3
4         .include "testutils.inc"
5
6         start
7
8         .global mcpxrs
9 mcpxrs:
10         ; Positive operands
11         set_fr_iimmed   2,4,fr7         ; multiply small numbers
12         set_fr_iimmed   3,5,fr8
13         mcpxrs          fr7,fr8,acc0
14         test_accg_immed         0xff,accg0
15         test_acc_immed  -14,acc0
16
17         set_fr_iimmed   3,1,fr7         ; multiply by 0
18         set_fr_iimmed   2,0,fr8
19         mcpxrs          fr7,fr8,acc0
20         test_accg_immed         0,accg0
21         test_acc_immed  6,acc0
22
23         set_fr_iimmed   2,1,fr7         ; multiply by 1
24         set_fr_iimmed   1,1,fr8
25         mcpxrs          fr7,fr8,acc0
26         test_accg_immed         0,accg0
27         test_acc_immed  1,acc0
28
29         set_fr_iimmed   0x3fff,2,fr7    ; 15 bit result
30         set_fr_iimmed   2,0x0007,fr8
31         mcpxrs          fr7,fr8,acc0
32         test_accg_immed         0,accg0
33         test_acc_limmed 0,0x7ff0,acc0
34
35         set_fr_iimmed   0x4000,2,fr7    ; 16 bit result
36         set_fr_iimmed   2,0x2000,fr8
37         mcpxrs          fr7,fr8,acc0
38         test_accg_immed         0,accg0
39         test_acc_limmed 0x0000,0x4000,acc0
40
41         set_fr_iimmed   0x7fff,0x0000,fr7       ; max positive result
42         set_fr_iimmed   0x7fff,0x7fff,fr8
43         mcpxrs          fr7,fr8,acc0
44         test_accg_immed         0,accg0
45         test_acc_limmed 0x3fff,0x0001,acc0
46
47         ; Mixed operands
48         set_fr_iimmed   2,0xfffd,fr7            ; multiply small numbers
49         set_fr_iimmed   0xfffd,1,fr8
50         mcpxrs          fr7,fr8,acc0
51         test_accg_immed         0xff,accg0
52         test_acc_immed  -3,acc0
53
54         set_fr_iimmed   0xfffe,2,fr7            ; multiply by 1
55         set_fr_iimmed   1,0xfffe,fr8
56         mcpxrs          fr7,fr8,acc0
57         test_accg_immed         0,accg0
58         test_acc_immed  2,acc0
59
60         set_fr_iimmed   0xfffe,0,fr7            ; multiply by 0
61         set_fr_iimmed   1,0xfffe,fr8
62         mcpxrs          fr7,fr8,acc0
63         test_accg_immed         0xff,accg0
64         test_acc_immed  -2,acc0
65
66         set_fr_iimmed   0x2001,0xfffe,fr7       ; 15 bit result
67         set_fr_iimmed   0xfffe,0xfff9,fr8
68         mcpxrs          fr7,fr8,acc0
69         test_accg_immed         0xff,accg0
70         test_acc_limmed 0xffff,0xbff0,acc0
71
72         set_fr_iimmed   0x4000,0xfffe,fr7       ; 16 bit result
73         set_fr_iimmed   0xfffe,0x0003,fr8
74         mcpxrs          fr7,fr8,acc0
75         test_accg_immed         0xff,accg0
76         test_acc_limmed 0xffff,0x8006,acc0
77
78         set_fr_iimmed   0x7fff,0x8000,fr7       ; max negative result
79         set_fr_iimmed   0x8000,0x8000,fr8
80         mcpxrs          fr7,fr8,acc0
81         test_accg_immed         0xff,accg0
82         test_acc_limmed 0x8000,0x8000,acc0
83
84         set_fr_iimmed   0x8000,0x7fff,fr7       ; max positive result
85         set_fr_iimmed   0x8000,0x8000,fr8
86         mcpxrs          fr7,fr8,acc0
87         test_accg_immed         0,accg0
88         test_acc_limmed 0x7fff,0x8000,acc0
89
90         ; Negative operands
91         set_fr_iimmed   0xfffe,0xfffc,fr7               ; multiply small numbers
92         set_fr_iimmed   0xfffd,0xfffb,fr8
93         mcpxrs          fr7,fr8,acc0
94         test_accg_immed         0xff,accg0
95         test_acc_immed  -14,acc0
96
97         set_fr_iimmed   0xffff,0xffff,fr7               ; multiply by -1
98         set_fr_iimmed   0xfffe,0xffff,fr8
99         mcpxrs          fr7,fr8,acc0
100         test_accg_immed         0,accg0
101         test_acc_immed  1,acc0
102
103         set_fr_iimmed   0x7fff,0x0000,fr7       ; almost max positive result
104         set_fr_iimmed   0x7fff,0x8001,fr8
105         mcpxrs          fr7,fr8,acc0
106         test_accg_immed         0,accg0
107         test_acc_immed  0x3fff0001,acc0
108
109         set_fr_iimmed   0x8000,0x0000,fr7       ; max positive result
110         set_fr_iimmed   0x8000,0x8000,fr8
111         mcpxrs          fr7,fr8,acc0
112         test_accg_immed         0,accg0
113         test_acc_immed  0x40000000,acc0
114
115         pass