aboutsummaryrefslogtreecommitdiff
path: root/stand/i386/btx/lib/btxv86.S
diff options
context:
space:
mode:
authorEd Maste <emaste@FreeBSD.org>2018-11-26 19:14:33 +0000
committerEd Maste <emaste@FreeBSD.org>2018-11-26 19:14:33 +0000
commite5b8bced3ffa27fa4af648f0dd890c017a1220ad (patch)
tree6c4d6e9f3fc36f7fc6680bc92e3809e343bcf30c /stand/i386/btx/lib/btxv86.S
parent3cb36739ce5896759952a5f648990732a410dffb (diff)
btx: rename .s files to .S to use Clang IAS
As part of the migration away from obsolete binutils we want to retire GNU as. Most assembly files used on amd64 have a .S extension and are assembled with Clang's integrated assembler; rename two files in stand/i386/btx/lib to .S to use IAS as well. The generated .text is identical (the entire .o files are not, as Clang adds debug info). PR: 205250, 233094 Discussed with: imp Sponsored by: The FreeBSD Foundation
Notes
Notes: svn path=/head/; revision=340990
Diffstat (limited to 'stand/i386/btx/lib/btxv86.S')
-rw-r--r--stand/i386/btx/lib/btxv86.S85
1 files changed, 85 insertions, 0 deletions
diff --git a/stand/i386/btx/lib/btxv86.S b/stand/i386/btx/lib/btxv86.S
new file mode 100644
index 000000000000..0d7d1116322d
--- /dev/null
+++ b/stand/i386/btx/lib/btxv86.S
@@ -0,0 +1,85 @@
+#
+# Copyright (c) 1998 Robert Nordier
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms are freely
+# permitted provided that the above copyright notice and this
+# paragraph and the following disclaimer are duplicated in all
+# such forms.
+#
+# This software is provided "AS IS" and without any express or
+# implied warranties, including, without limitation, the implied
+# warranties of merchantability and fitness for a particular
+# purpose.
+#
+
+# $FreeBSD$
+
+#
+# BTX V86 interface.
+#
+
+#
+# Globals.
+#
+ .global __v86int
+#
+# Fields in V86 interface structure.
+#
+ .set V86_CTL,0x0 # Control flags
+ .set V86_ADDR,0x4 # Int number/address
+ .set V86_ES,0x8 # V86 ES
+ .set V86_DS,0xc # V86 DS
+ .set V86_FS,0x10 # V86 FS
+ .set V86_GS,0x14 # V86 GS
+ .set V86_EAX,0x18 # V86 EAX
+ .set V86_ECX,0x1c # V86 ECX
+ .set V86_EDX,0x20 # V86 EDX
+ .set V86_EBX,0x24 # V86 EBX
+ .set V86_EFL,0x28 # V86 eflags
+ .set V86_EBP,0x2c # V86 EBP
+ .set V86_ESI,0x30 # V86 ESI
+ .set V86_EDI,0x34 # V86 EDI
+#
+# Other constants.
+#
+ .set INT_V86,0x31 # Interrupt number
+ .set SIZ_V86,0x38 # Size of V86 structure
+#
+# V86 interface function.
+#
+__v86int: popl __v86ret # Save return address
+ pushl $__v86 # Push pointer
+ call __v86_swap # Load V86 registers
+ int $INT_V86 # To BTX
+ call __v86_swap # Load user registers
+ addl $0x4,%esp # Discard pointer
+ pushl __v86ret # Restore return address
+ ret # To user
+#
+# Swap V86 and user registers.
+#
+__v86_swap: xchgl %ebp,0x4(%esp,1) # Swap pointer, EBP
+ xchgl %eax,V86_EAX(%ebp) # Swap EAX
+ xchgl %ecx,V86_ECX(%ebp) # Swap ECX
+ xchgl %edx,V86_EDX(%ebp) # Swap EDX
+ xchgl %ebx,V86_EBX(%ebp) # Swap EBX
+ pushl %eax # Save
+ pushf # Put eflags
+ popl %eax # in EAX
+ xchgl %eax,V86_EFL(%ebp) # Swap
+ pushl %eax # Put EAX
+ popf # in eflags
+ movl 0x8(%esp,1),%eax # Load EBP
+ xchgl %eax,V86_EBP(%ebp) # Swap
+ movl %eax,0x8(%esp,1) # Save EBP
+ popl %eax # Restore
+ xchgl %esi,V86_ESI(%ebp) # Swap ESI
+ xchgl %edi,V86_EDI(%ebp) # Swap EDI
+ xchgl %ebp,0x4(%esp,1) # Swap pointer, EBP
+ ret # To caller
+#
+# V86 interface structure.
+#
+ .comm __v86,SIZ_V86
+ .comm __v86ret,4