1# Intel(r) Wireless MMX(tm) technology testcase for WSLL
2# mach: xscale
3# as: -mcpu=xscale+iwmmxt
4
5	.include "testutils.inc"
6
7	start
8
9	.global wsll
10wsll:
11	# Enable access to CoProcessors 0 & 1 before
12        # we attempt these instructions.
13
14	mvi_h_gr   r1, 3
15	mcr        p15, 0, r1, cr15, cr1, 0
16
17	# Test Halfword Logical Shift Left
18		
19	mvi_h_gr   r0, 0x12345678
20	mvi_h_gr   r1, 0x9abcdef0
21	mvi_h_gr   r2, 0x11111104
22	mvi_h_gr   r3, 0x11111111
23	mvi_h_gr   r4, 0
24	mvi_h_gr   r5, 0
25
26	tmcrr	   wr0, r0, r1
27	tmcrr	   wr1, r2, r3
28	tmcrr	   wr2, r4, r5
29
30	wsllh      wr2, wr0, wr1
31	
32	tmrrc	   r0, r1, wr0
33	tmrrc	   r2, r3, wr1
34	tmrrc	   r4, r5, wr2
35	
36	test_h_gr  r0, 0x12345678
37	test_h_gr  r1, 0x9abcdef0
38	test_h_gr  r2, 0x11111104
39	test_h_gr  r3, 0x11111111
40	test_h_gr  r4, 0x23406780
41	test_h_gr  r5, 0xabc0ef00
42		
43	# Test Halfword Aritc Shift Left by CG register
44		
45	mvi_h_gr   r0, 0x12345678
46	mvi_h_gr   r1, 0x9abcdef0
47	mvi_h_gr   r2, 0x11111104
48	mvi_h_gr   r3, 0
49	mvi_h_gr   r4, 0
50
51	tmcrr	   wr0,   r0, r1
52	tmcr	   wcgr1, r2
53	tmcrr	   wr1,   r3, r4
54
55	wsllhg     wr1, wr0, wcgr1
56	
57	tmrrc	   r0, r1, wr0
58	tmrc	   r2, wcgr1
59	tmrrc	   r3, r4, wr1
60	
61	test_h_gr  r0, 0x12345678
62	test_h_gr  r1, 0x9abcdef0
63	test_h_gr  r2, 0x11111104
64	test_h_gr  r3, 0x23406780
65	test_h_gr  r4, 0xabc0ef00
66		
67	# Test Word Logical Shift Left
68		
69	mvi_h_gr   r0, 0x12345678
70	mvi_h_gr   r1, 0x9abcdef0
71	mvi_h_gr   r2, 0x11111104
72	mvi_h_gr   r3, 0x11111111
73	mvi_h_gr   r4, 0
74	mvi_h_gr   r5, 0
75
76	tmcrr	   wr0, r0, r1
77	tmcrr	   wr1, r2, r3
78	tmcrr	   wr2, r4, r5
79
80	wsllw      wr2, wr0, wr1
81	
82	tmrrc	   r0, r1, wr0
83	tmrrc	   r2, r3, wr1
84	tmrrc	   r4, r5, wr2
85	
86	test_h_gr  r0, 0x12345678
87	test_h_gr  r1, 0x9abcdef0
88	test_h_gr  r2, 0x11111104
89	test_h_gr  r3, 0x11111111
90	test_h_gr  r4, 0x23456780
91	test_h_gr  r5, 0xabcdef00
92		
93	# Test Word Logical Shift Left by CG register
94		
95	mvi_h_gr   r0, 0x12345678
96	mvi_h_gr   r1, 0x9abcdef0
97	mvi_h_gr   r2, 0x11111104
98	mvi_h_gr   r3, 0
99	mvi_h_gr   r4, 0
100
101	tmcrr	   wr0,   r0, r1
102	tmcr	   wcgr2, r2
103	tmcrr	   wr1,   r3, r4
104
105	wsllwg     wr1, wr0, wcgr2
106	
107	tmrrc	   r0, r1, wr0
108	tmrc	   r2, wcgr2
109	tmrrc	   r3, r4, wr1
110	
111	test_h_gr  r0, 0x12345678
112	test_h_gr  r1, 0x9abcdef0
113	test_h_gr  r2, 0x11111104
114	test_h_gr  r3, 0x23456780
115	test_h_gr  r4, 0xabcdef00
116		
117	# Test Double Word Logical Shift Left
118		
119	mvi_h_gr   r0, 0x12345678
120	mvi_h_gr   r1, 0x9abcdefc
121	mvi_h_gr   r2, 0x11111104
122	mvi_h_gr   r3, 0x11111111
123	mvi_h_gr   r4, 0
124	mvi_h_gr   r5, 0
125
126	tmcrr	   wr0, r0, r1
127	tmcrr	   wr1, r2, r3
128	tmcrr	   wr2, r4, r5
129
130	wslld      wr2, wr0, wr1
131	
132	tmrrc	   r0, r1, wr0
133	tmrrc	   r2, r3, wr1
134	tmrrc	   r4, r5, wr2
135	
136	test_h_gr  r0, 0x12345678
137	test_h_gr  r1, 0x9abcdefc
138	test_h_gr  r2, 0x11111104
139	test_h_gr  r3, 0x11111111
140	test_h_gr  r4, 0x23456780
141	test_h_gr  r5, 0xabcdefc1
142		
143	# Test Double Word Logical Shift Left by CG register
144		
145	mvi_h_gr   r0, 0x12345678
146	mvi_h_gr   r1, 0x9abcdefc
147	mvi_h_gr   r2, 0x11111104
148	mvi_h_gr   r3, 0
149	mvi_h_gr   r4, 0
150
151	tmcrr	   wr0,   r0, r1
152	tmcr	   wcgr3, r2
153	tmcrr	   wr1,   r3, r4
154
155	wslldg     wr1, wr0, wcgr3
156	
157	tmrrc	   r0, r1, wr0
158	tmrc	   r2, wcgr3
159	tmrrc	   r3, r4, wr1
160	
161	test_h_gr  r0, 0x12345678
162	test_h_gr  r1, 0x9abcdefc
163	test_h_gr  r2, 0x11111104
164	test_h_gr  r3, 0x23456780
165	test_h_gr  r4, 0xabcdefc1
166		
167	pass
168