1	.macro	call_stub, name
2	.set	push
3	.set	nomips16
4	.section .mips16.call.\name, "ax", @progbits
5	.ent	__call_stub_\name
6	.type	__call_stub_\name, @function
7__call_stub_\name:
8	la	$25, \name
9	jr	$25
10	.set	pop
11	.endm
12
13	# Flags to specify how a particular function is referenced
14
15	.equ	DC, 1		# Direct call from "compressed" code
16	.equ	IC, 2		# Indirect call from "compressed" code
17	.equ	DU, 4		# Direct call from "uncompressed" code
18	.equ	IU, 8		# Indirect call from "uncompressed" code
19	.equ	LO, 16		# Direct address reference (%lo)
20
21	# A wrapper around a macro called test_one, which is defined by
22	# the file that includes this one.  NAME is the name of a function
23	# that is referenced in the way described by FLAGS, an inclusive OR
24	# of the flags above.  The wrapper filters out any functions whose
25	# FLAGS are not a subset of FILTER.
26
27	.macro	test_filter, name, flags
28	.if	(\flags & filter) == \flags
29	test_one \name, \flags
30	.endif
31	.endm
32
33	.macro	test_all_dc, name, flags
34	test_filter \name, \flags
35	test_filter \name\()_dc, (\flags | DC)
36	.endm
37
38	.macro	test_all_ic, name, flags
39	test_all_dc \name, \flags
40	test_all_dc \name\()_ic, (\flags | IC)
41	.endm
42
43	.macro	test_all_du, name, flags
44	test_all_ic \name, \flags
45	test_all_ic \name\()_du, (\flags | DU)
46	.endm
47
48	.macro	test_all_iu, name, flags
49	test_all_du \name, \flags
50	test_all_du \name\()_iu, (\flags | IU)
51	.endm
52
53	.macro	test_all_lo, name, flags
54	test_all_iu \name, \flags
55	test_all_iu \name\()_lo, (\flags | LO)
56	.endm
57
58	# Test all the combinations of interest.
59
60	.macro	test_all
61	test_all_lo f, 0
62	.endm
63