summaryrefslogtreecommitdiff
path: root/gas/testsuite/gas/m68hc11/malis.s
blob: c35db9c9a3b86e21cf9f9d1cc946f1bee38b9a92 (plain)
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
;;
;; This file verifies the compliance with the Motorola specification:
;; 
;; MOTOROLA STANDARDS
;; Document #1001, Version 1.0
;; SPECIFICATION FOR Motorola 8- and 16-Bit ASSEMBLY LANGUAGE INPUT STANDARD
;; 26, October 1999
;;
;; Available at:
;; 
;; http://www.mcu.motsps.com/dev_tools/hc12/eabi/m8-16alis.pdf
;;
;; Lines starting with '#' represent instructions that fail in GAS.
;;
;;
;; Section 8.2 INPUTS
	;; Validated within the whole file
	
;; Section 8.2.1 Character Set
	;; TBD

;; Section 8.2.2 Assembly Language Statement
	;; Validated within the whole file

;; Section 8.2.3 Comments
	; Motorola comment
	;; This file is full of comments

;; Section 8.2.5 Location Counter
	section .text

_start:
L0:	*			; L0 set to 0 (relative to text)
	ldaa	1,x
L1:	equ	*		; L1 set to 2 (relative to text)

;; Section 8.2.6 Sections
	section .data
	section .text
	section empty
	section .text

;; Section 8.2.7 Expressions
L2:	equ	23		; Absolute = 0x17
L3:	equ	L0-23		; Simple relocatable

;; Section 8.2.7.1 Primary Expression
L4:	equ	45		; Numeric  = 0x2d
L5:	equ	L0		; Symbolic

;; Section 8.2.7.2 Absolute Expression
L_txt:	ldaa	#44
L_txt2:
L6:	equ	-L4		; unary expr		0xffffffd3
L7:	equ	L6+1000		; binary expr		0x03bb
L8:	equ	L6-12		;			0xffffffc7
L9:	equ	L_txt2-L_txt	; reloc - reloc		2 = sizeof(ldaa #44)

;; Section 8.2.7.3 Simple Relocatable Expressions
L10:	equ	_start		; symbol		0 + text
L11:	equ	L10+23		; reloc+abs		0x17 + text
L12:	equ	L11-4		; reloc-abs		0x13 + text
L13:	equ	L12+L9		; reloc+abs		0x15 + text

;; Section 8.2.8 Symbols
	section .text
Text_Symbol:
	ldx	#Data_Symbol

	section .data
Data_Symbol:

;; Section 8.2.8.1 Labels
L_label_shall_be_significant_to_at_least_32_chars:
	dc.b	1
L_label_lower:			; Labels are case sensitive
	dc.b	2
L_Label_Lower:
	dc.b	3

;; Section 8.2.9 Constants
;
;	Section 8.2.9.1	Decimal Constants
	section .text
L_constant:
	ldaa	#123		; -> ldaa #0x7b
	ldaa	#-23		; -> ldaa #0xe9
	
;;	Section 8.2.9.2	Binary Constants
	ldab	#%10001010	; -> ldab #0x8A
	ldab	#%0111		; -> ldab #0x07

;;	Section 8.2.9.3	Octal Constants
	ldaa	#@74		; -> ldaa 0x3c
	ldaa	#@377		; -> ldaa 0xff

;;	Section 8.2.9.4	Hexadecimal Constants
	ldaa	#$ae		; -> ldaa 0xae
	ldaa	#$B2		; -> ldaa 0xb2

;;	Section 8.2.9.5	String Constants
	section	.data
#	ascii	'"Single quote string"'
	ascii	"'Double quote string'"

;;	Section 8.2.9.6 Floating Point Constants
;;	No specification
L_float:	float	3.241592e-2

;;	Section 8.2.10	Operators
	section .text
L_operator:
	ldx	#(((1<<3)&(1<<3)|2)<<4)+(4*4-1)
	ldx	#(L2>=23)&1-(L2<=23)&1+(L2==23)&1 ; -> ldx #1
	ldx	#(L2>23)&1-(L2<23)&1+(L2==23)&1   ; -> ldx #0
	ldx	#1-1+1-1+1-1
	ldab	#~L4		; -> ldab #0xd2
#	ldab	#<_start	; force to 8-bit
#	ldx	#>_start	; force to 16-bit
#	ldab	#page(_start)	; 68HC12 page number of symbol

;; Section 8.2.11 Instructions
;;	Defined by other tests

;; Section 8.2.12 Assembler Directives
;; 
;; Section 8.2.12.1 Conditional Directives
;;
# The specification says we are allowed to have spaces in expressions.
# This does not work with GAS in mri mode, the instruction 'if L2 < 24'
# is in fact treated as 'if L2'.
L_if:
	if L2<24		; true
	ldx	#1		; -> ldx #1
	else
	ldx	#2
	endif
	if L2<23||L2>23||L2==22+1 ; true
	if L2<23		; false
	ldaa	#0
	endif
	if L2>23		; false
	ldaa	#1
	endif
	if L2 == 23		; true
	ldaa	#L2+8		; -> ldaa #31
	endif
	if L2+2<23+2		; false
	if L2+4>23+4
	ldaa	#1
	elseif L2==23
	ldaa	#2
	else
	ldaa	#3
	endif
	elseif L2==23		; true
	ldaa	#4		; -> ldaa #4
	else
	ldaa	#5
	endif
	endif
	ifdef L1		; true
	ldx	#23		; -> ldx #0x17
	endif
	ifndef L_undef		; true
	ldx	#4		; -> ldx #4
	endif

;;	Section 8.2.12.2 Define Constant -dc
	section	.data
L_const_data:
	dc.b	(1<<3)|2	; 0x0a
	dc.w	(1<<9)+2	; 0x02 0x02
	dc.l	$12345678
	dc.b	10
	dc.l	(1<<9)*(3<<12)
#	dc.b	"Hello"
#	dc.w	"World"
#	dc.l	"!!!"

;;	Section 8.2.12.3 Define Constant Block -dcb
	dcb.b	3,2
	dcb.w	2,$55AA
	dcb.l	2,$12345678
	dcb.b	10,2
	dcb.w	5,$55AA
	dcb.l	2,$12345678
#	dcb.b	4, 12		; Fails in GAS due to space

;;	Section 8.2.12.4 Define Storage - ds
	ds.b	4
	ds.w	2
	ds.l	1
	ds	2

;;	Section 8.2.12.5 Equate Symbol Value - equ
L_equ1:	equ	(1<<8)+3
L_equ2:	equ	L_equ1*3
L_equ3:	equ	L_equ2-L_equ1

;;	Section 8.2.12.6 Include File - include
#	include 'malis-include.s'
#	include "malis-include.s"
	include malis-include.s
	include malis-include.s

;;	Section 8.2.12.7 Origin - org
	section .text
#	org	$100
	ldaa	#23
#	org	$200
	staa	24
#	org	$0
	rts

;;	Section 8.2.12.8 Define Section - section
	section .text
	ldaa	23

	section .data
	dc.b	23

;;	Section 8.2.12.9 Set Value of Symbol - set
s1:	set	3
s1:	set	4
s2:	set	s1+2
s3:	set	s2+4

;; Section 8.2.12.10 External Symbol Definition - xdef
	xdef	s1
	xdef	s2
	xdef	entry

;; Section 8.2.12.11 External Symbol Reference - xref
	section	.text
	xref	printf
	xrefb	write
entry:
	rts