• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// This input was created by taking the instruction productions in
2// the old assembler's (8a's) grammar and hand-writing complete
3// instructions for each rule, to guarantee we cover the same space.
4
5#include "../../../../../runtime/textflag.h"
6
7TEXT foo(SB), DUPOK|NOSPLIT, $0
8
9// LTYPE1 nonrem	{ outcode(int($1), &$2); }
10	SETCC	AX
11	SETCC	foo+4(SB)
12
13// LTYPE2 rimnon	{ outcode(int($1), &$2); }
14	DIVB	AX
15	DIVB	foo+4(SB)
16	PUSHL	$foo+4(SB)
17	POPL		AX
18
19// LTYPE3 rimrem	{ outcode(int($1), &$2); }
20	SUBB	$1, AX
21	SUBB	$1, foo+4(SB)
22	SUBB	BX, AX
23	SUBB	BX, foo+4(SB)
24
25// LTYPE4 remrim	{ outcode(int($1), &$2); }
26	CMPB	AX, $1
27	CMPB	foo+4(SB), $4
28	CMPB	BX, AX
29	CMPB	foo+4(SB), BX
30
31// LTYPER nonrel	{ outcode(int($1), &$2); }
32label:
33	JC	label // JCS
34	JC	-1(PC) // JCS -1(PC)
35
36// LTYPEC spec3	{ outcode(int($1), &$2); }
37	CALL	AX
38	JCS	2(PC)
39	JMP	*AX // JMP AX
40	CALL	*foo(SB)
41	JCS	2(PC)
42	JMP	$4
43	JCS	2(PC)
44	JMP	label // JMP 16
45	CALL	foo(SB)
46//	CALL	(AX*4) // TODO: This line is silently dropped on the floor!
47	CALL	foo+4(SB)(AX*4)
48	CALL	*4(SP) // CALL 4(SP)
49	CALL	*(AX) // CALL (AX)
50	CALL	*(SP) // CALL (SP)
51//	CALL	*(AX*4) // TODO: This line is silently dropped on the floor!
52	CALL	*(AX)(AX*4) // CALL (AX)(AX*4)
53	CALL	4(SP)
54	CALL	(AX)
55	CALL	(SP)
56//	CALL	(AX*4) // TODO: This line is silently dropped on the floor!
57	JCS	2(PC)
58	JMP	(AX)(AX*4)
59
60// LTYPEN spec4	{ outcode(int($1), &$2); }
61	NOP
62	NOP	AX
63	NOP	foo+4(SB)
64
65// LTYPES spec5	{ outcode(int($1), &$2); }
66	SHLL	$4, BX
67	SHLL	$4, foo+4(SB)
68	SHLL	$4, foo+4(SB):AX // SHLL $4, AX, foo+4(SB)
69
70// LTYPEM spec6	{ outcode(int($1), &$2); }
71	MOVL	AX, BX
72	MOVL	$4, BX
73
74// LTYPEI spec7	{ outcode(int($1), &$2); }
75	IMULL	AX
76	IMULL	$4, CX
77	IMULL	AX, BX
78
79// LTYPEXC spec9	{ outcode(int($1), &$2); }
80	CMPPD	X0, X1, 4
81	CMPPD	foo+4(SB), X1, 4
82
83// LTYPEX spec10	{ outcode(int($1), &$2); }
84	PINSRD	$1, (AX), X0
85	PINSRD	$2, foo+4(FP), X0
86
87// Was bug: LOOP is a branch instruction.
88	JCS	2(PC)
89loop:
90	LOOP	loop // LOOP
91
92// Tests for TLS reference.
93	MOVL    (TLS), AX
94	MOVL    8(TLS), DX
95
96// LTYPE0 nonnon	{ outcode(int($1), &$2); }
97	RET
98	RET	foo(SB)
99