diff options
Diffstat (limited to 'arch/i386/math-emu/get_address.c')
-rw-r--r-- | arch/i386/math-emu/get_address.c | 13 |
1 files changed, 3 insertions, 10 deletions
diff --git a/arch/i386/math-emu/get_address.c b/arch/i386/math-emu/get_address.c index 91175738e948..9819b705efa4 100644 --- a/arch/i386/math-emu/get_address.c +++ b/arch/i386/math-emu/get_address.c | |||
@@ -155,7 +155,6 @@ static long pm_address(u_char FPU_modrm, u_char segment, | |||
155 | { | 155 | { |
156 | struct desc_struct descriptor; | 156 | struct desc_struct descriptor; |
157 | unsigned long base_address, limit, address, seg_top; | 157 | unsigned long base_address, limit, address, seg_top; |
158 | unsigned short selector; | ||
159 | 158 | ||
160 | segment--; | 159 | segment--; |
161 | 160 | ||
@@ -173,17 +172,11 @@ static long pm_address(u_char FPU_modrm, u_char segment, | |||
173 | /* fs and gs aren't used by the kernel, so they still have their | 172 | /* fs and gs aren't used by the kernel, so they still have their |
174 | user-space values. */ | 173 | user-space values. */ |
175 | case PREFIX_FS_-1: | 174 | case PREFIX_FS_-1: |
176 | /* The cast is needed here to get gcc 2.8.0 to use a 16 bit register | 175 | /* N.B. - movl %seg, mem is a 2 byte write regardless of prefix */ |
177 | in the assembler statement. */ | 176 | savesegment(fs, addr->selector); |
178 | |||
179 | __asm__("mov %%fs,%0":"=r" (selector)); | ||
180 | addr->selector = selector; | ||
181 | break; | 177 | break; |
182 | case PREFIX_GS_-1: | 178 | case PREFIX_GS_-1: |
183 | /* The cast is needed here to get gcc 2.8.0 to use a 16 bit register | 179 | savesegment(gs, addr->selector); |
184 | in the assembler statement. */ | ||
185 | __asm__("mov %%gs,%0":"=r" (selector)); | ||
186 | addr->selector = selector; | ||
187 | break; | 180 | break; |
188 | default: | 181 | default: |
189 | addr->selector = PM_REG_(segment); | 182 | addr->selector = PM_REG_(segment); |