Lines Matching +full:7 +full:- +full:segment

1 // SPDX-License-Identifier: GPL-2.0
2 /*---------------------------------------------------------------------------+
9 | Australia. E-mail billm@suburbia.net |
12 +---------------------------------------------------------------------------*/
14 /*---------------------------------------------------------------------------+
19 +---------------------------------------------------------------------------*/
43 #define REG_(x) (*(long *)(reg_offset[(x)] + (u_char *)FPU_info->regs))
56 (reg_offset_vm86[((unsigned)x)] + (u_char *)FPU_info->regs))
69 (reg_offset_pm[((unsigned)x)] + (u_char *)FPU_info->regs))
83 index = (base >> 3) & 7; in sib()
84 base &= 7; in sib()
93 /* A non-zero ss is illegal */ in sib()
123 static unsigned long vm86_segment(u_char segment, struct address *addr) in vm86_segment() argument
125 segment--; in vm86_segment()
127 if (segment > PREFIX_SS_) { in vm86_segment()
132 addr->selector = VM86_REG_(segment); in vm86_segment()
133 return (unsigned long)VM86_REG_(segment) << 4; in vm86_segment()
137 static long pm_address(u_char FPU_modrm, u_char segment, in pm_address() argument
143 segment--; in pm_address()
146 /* segment is unsigned, so this also detects if segment was 0: */ in pm_address()
147 if (segment > PREFIX_SS_) { in pm_address()
153 switch (segment) { in pm_address()
154 case PREFIX_GS_ - 1: in pm_address()
156 savesegment(gs, addr->selector); in pm_address()
159 addr->selector = PM_REG_(segment); in pm_address()
162 descriptor = FPU_get_ldt_descriptor(addr->selector); in pm_address()
167 limit += base_address - 1; in pm_address()
181 ((seg_top - address) >= 255 ? 255 : seg_top - address); in pm_address()
185 ((limit - address) >= 254 ? 255 : limit - address + 1); in pm_address()
198 7 6 5 4 3 2 1 0
204 7 6 5 4 3 2 1 0
214 unsigned rm = FPU_modrm & 7; in FPU_get_address()
219 in `non-segmented' 32 bit protected mode. */ in FPU_get_address()
221 && (addr_modes.override.segment == PREFIX_CS_)) { in FPU_get_address()
225 addr->selector = FPU_DS; /* Default, for 32 bit non-segmented mode. */ in FPU_get_address()
244 addr->offset = address; in FPU_get_address()
249 addr->offset = address; in FPU_get_address()
275 addr->offset = address; in FPU_get_address()
281 address += vm86_segment(addr_modes.override.segment, addr); in FPU_get_address()
285 address = pm_address(FPU_modrm, addr_modes.override.segment, in FPU_get_address()
299 unsigned rm = FPU_modrm & 7; in FPU_get_address_16()
303 in `non-segmented' 32 bit protected mode. */ in FPU_get_address_16()
305 && (addr_modes.override.segment == PREFIX_CS_)) { in FPU_get_address_16()
309 addr->selector = FPU_DS; /* Default, for 32 bit non-segmented mode. */ in FPU_get_address_16()
349 address += FPU_info->regs->bx + FPU_info->regs->si; in FPU_get_address_16()
352 address += FPU_info->regs->bx + FPU_info->regs->di; in FPU_get_address_16()
355 address += FPU_info->regs->bp + FPU_info->regs->si; in FPU_get_address_16()
356 if (addr_modes.override.segment == PREFIX_DEFAULT) in FPU_get_address_16()
357 addr_modes.override.segment = PREFIX_SS_; in FPU_get_address_16()
360 address += FPU_info->regs->bp + FPU_info->regs->di; in FPU_get_address_16()
361 if (addr_modes.override.segment == PREFIX_DEFAULT) in FPU_get_address_16()
362 addr_modes.override.segment = PREFIX_SS_; in FPU_get_address_16()
365 address += FPU_info->regs->si; in FPU_get_address_16()
368 address += FPU_info->regs->di; in FPU_get_address_16()
371 address += FPU_info->regs->bp; in FPU_get_address_16()
372 if (addr_modes.override.segment == PREFIX_DEFAULT) in FPU_get_address_16()
373 addr_modes.override.segment = PREFIX_SS_; in FPU_get_address_16()
375 case 7: in FPU_get_address_16()
376 address += FPU_info->regs->bx; in FPU_get_address_16()
383 addr->offset = address; in FPU_get_address_16()
389 address += vm86_segment(addr_modes.override.segment, addr); in FPU_get_address_16()
393 address = pm_address(FPU_modrm, addr_modes.override.segment, in FPU_get_address_16()