1 #ifndef ASM_X86_INTERNAL_H
2 #warning Do not include this file directly
3 #else
4 
asm_shrl(struct assembler_state_t * state,uint8_t count,uint32_t * dst)5 static inline void asm_shrl(struct assembler_state_t *state, uint8_t count, uint32_t *dst)
6 {
7 	count = count & 0x0000001f;
8 	int of = *dst&0x80000000;
9 
10 	if (count)
11 	{
12 		write_cf(state->eflags, *dst & 1<<(count-1));
13 		*dst>>=count;
14 	}
15 
16 	if (count==1)
17 		write_of(state->eflags, of);
18 
19 	write_sf(state->eflags, *dst & 0x80000000);
20 	write_zf(state->eflags, !*dst);
21 #ifdef X86_PF
22 	asm_update_pf(state->eflags, *dst);
23 #endif
24 }
asm_shrw(struct assembler_state_t * state,uint8_t count,uint16_t * dst)25 static inline void asm_shrw(struct assembler_state_t *state, uint8_t count, uint16_t *dst)
26 {
27 	count = count & 0x0000001f;
28 	int of = *dst&0x8000;
29 
30 	if (count)
31 	{
32 		write_cf(state->eflags, *dst & 1<<(count-1));
33 		*dst>>=count;
34 	}
35 
36 	if (count==1)
37 		write_of(state->eflags, of);
38 
39 	write_sf(state->eflags, *dst & 0x80000000);
40 	write_zf(state->eflags, !*dst);
41 #ifdef X86_PF
42 	asm_update_pf(state->eflags, *dst);
43 #endif
44 }
asm_shrb(struct assembler_state_t * state,uint8_t count,uint8_t * dst)45 static inline void asm_shrb(struct assembler_state_t *state, uint8_t count, uint8_t *dst)
46 {
47 	count = count & 0x0000001f;
48 	int of = *dst&0x80;
49 
50 	if (count)
51 	{
52 		write_cf(state->eflags, *dst & 1<<(count-1));
53 		*dst>>=count;
54 	}
55 
56 	if (count==1)
57 		write_of(state->eflags, of);
58 
59 	write_cf(state->eflags, 0);
60 	write_sf(state->eflags, *dst & 0x80);
61 	write_zf(state->eflags, !*dst);
62 #ifdef X86_PF
63 	asm_update_pf(state->eflags, *dst);
64 #endif
65 }
66 
67 #endif
68