1/*\ constants and macros for x86 assembly files. \*/
2
3
4/*\ Constants for asm_blend.S and asm_blend_cmod.S \*/
5/* m0X000000: .byte   0,   0,   0,   0,   0,   0, 255,   0 */
6#define m0X000000_H 0x00FF0000
7#define m0X000000_L 0x00000000
8/* m10000000: .byte   0,   0,   0,   0,   0,   0,   0,   1 */
9#define m10000000_H 0x01000000
10#define m10000000_L 0x00000000
11/* m00XXXXXX: .byte 255, 255, 255, 255, 255, 255,   0,   0 */
12#define m00XXXXXX_H 0x0000FFFF
13#define m00XXXXXX_L 0xFFFFFFFF
14/* mVX000000: .byte   0,   0,   0,   0,   0,   0, 255, 127 */
15#define mVX000000_H 0x7FFF0000
16#define mVX000000_L 0x00000000
17/* mV0000000: .byte   0,   0,   0,   0,   0,   0,   0, 128 */
18#define mV0000000_H 0x80000000
19#define mV0000000_L 0x00000000
20/* m0XXX0XXX: .byte 255, 255, 255,   0, 255, 255, 255,   0 */
21#define m0XXX0XXX_H 0x00FFFFFF
22#define m0XXX0XXX_L 0x00FFFFFF
23/* mX000X000: .byte   0,   0,   0, 255,   0,   0,   0, 255 */
24#define mX000X000_H 0xFF000000
25#define mX000X000_L 0xFF000000
26/* m10001000: .byte   0,   0,   0,   1,   0,   0,   0,   1 */
27#define m10001000_H 0x01000000
28#define m10001000_L 0x01000000
29/* m000V0V0V: .byte 127,   0, 127,   0, 127,   0,   0,   0 */
30#define m000V0V0V_H 0x0000007F
31#define m000V0V0V_L 0x007F007F
32/* mI0000000: .byte   0,   0,   0,   0,   0,   0,   0,  64 */
33#define mI0000000_H 0x40000000
34#define mI0000000_L 0x00000000
35/* m0VVV0VVV: .byte 127, 127, 127,   0, 127, 127, 127,   0 */
36#define m0VVV0VVV_H 0x007F7F7F
37#define m0VVV0VVV_L 0x007F7F7F
38/* c1: .word 0x1, 0x1, 0x1, 0x1 */
39#define c1_H 0x00010001
40#define c1_L 0x00010001
41
42
43/*\ Constants for asm_rgba.S \*/
44/* m_rb: .long 0x00f800f8, 0x00f800f8 */
45#define m_rb_H 0x00f800f8
46#define m_rb_L 0x00f800f8
47/* m_r:  .long 0xf800f800, 0xf800f800 */
48#define m_r_H 0xf800f800
49#define m_r_L 0xf800f800
50/* m_g6: .long 0x0000fc00, 0x0000fc00 */
51#define m_g6_H 0x0000fc00
52#define m_g6_L 0x0000fc00
53/* m_g5: .long 0x0000f800, 0x0000f800 */
54#define m_g5_H 0x0000f800
55#define m_g5_L 0x0000f800
56/*\ Multiply constants to fake two shifts at once \*/
57/* mul_rgb565: .long 0x20000004, 0x20000004 */
58#define mul_rgb565_H 0x20000004
59#define mul_rgb565_L 0x20000004
60/* mul_bgr565: .long 0x00042000, 0x00042000 */
61#define mul_bgr565_H 0x00042000
62#define mul_bgr565_L 0x00042000
63/* mul_rgb555: .long 0x20000008, 0x20000008 */
64#define mul_rgb555_H 0x20000008
65#define mul_rgb555_L 0x20000008
66/* mul_bgr555: .long 0x00082000, 0x00082000 */
67#define mul_bgr555_H 0x00082000
68#define mul_bgr555_L 0x00082000
69
70
71/*\ Load an 8-byte constant to an mmx register \*/
72#define LOAD_IMMQ(mask, reg)		\
73	pushl	$mask##_H		;\
74	pushl	$mask##_L		;\
75	movq	(%esp), reg
76#define CLEANUP_IMMQ_LOADS(num_loaded)	\
77	addl	$ num_loaded * 8, %esp
78