summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2020-03-28 19:35:12 +0100
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2020-03-28 19:35:12 +0100
commit04248c54dc191ae07adac0dca1f4bd37fb11a929 (patch)
treeb715eef62924177e9304f3a8c585ca708abb0b76
parent328335176df95e9762cc5e04877cb231b0b2292e (diff)
kdasm: Add 64bit variant
* i386/i386at/kdasm.S (start, count, value, from, to): Use B_ARG* instead of reimplementing them. * x86_64/kdasm.S: New file.
-rw-r--r--i386/i386at/kdasm.S12
-rw-r--r--x86_64/kdasm.S133
2 files changed, 139 insertions, 6 deletions
diff --git a/i386/i386at/kdasm.S b/i386/i386at/kdasm.S
index 46b1ee6b..fd0e1c86 100644
--- a/i386/i386at/kdasm.S
+++ b/i386/i386at/kdasm.S
@@ -69,9 +69,9 @@ WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
*/
-#define start 0x08(%ebp)
-#define count 0x0c(%ebp)
-#define value 0x10(%ebp)
+#define start B_ARG0
+#define count B_ARG1
+#define value B_ARG2
ENTRY(kd_slmwd)
pushl %ebp
@@ -96,9 +96,9 @@ ENTRY(kd_slmwd)
* "slam up"
*/
-#define from 0x08(%ebp)
-#define to 0x0c(%ebp)
-#define count 0x10(%ebp)
+#define from B_ARG0
+#define to B_ARG1
+#define count B_ARG2
ENTRY(kd_slmscu)
pushl %ebp
movl %esp, %ebp
diff --git a/x86_64/kdasm.S b/x86_64/kdasm.S
new file mode 100644
index 00000000..4ab4b9be
--- /dev/null
+++ b/x86_64/kdasm.S
@@ -0,0 +1,133 @@
+/*
+ * Mach Operating System
+ * Copyright (c) 1991,1990,1989 Carnegie Mellon University
+ * All Rights Reserved.
+ *
+ * Permission to use, copy, modify and distribute this software and its
+ * documentation is hereby granted, provided that both the copyright
+ * notice and this permission notice appear in all copies of the
+ * software, derivative works or modified versions, and any portions
+ * thereof, and that both notices appear in supporting documentation.
+ *
+ * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
+ * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
+ * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
+ *
+ * Carnegie Mellon requests users of this software to return to
+ *
+ * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
+ * School of Computer Science
+ * Carnegie Mellon University
+ * Pittsburgh PA 15213-3890
+ *
+ * any improvements or extensions that they make and grant Carnegie Mellon
+ * the rights to redistribute these changes.
+ */
+/*
+ * Some inline code to speed up major block copies to and from the
+ * screen buffer.
+ *
+ * Copyright Ing. C. Olivetti & C. S.p.A. 1988, 1989.
+ * All rights reserved.
+ *
+ * orc!eugene 28 Oct 1988
+ *
+ */
+/*
+ Copyright 1988, 1989 by Olivetti Advanced Technology Center, Inc.,
+Cupertino, California.
+
+ All Rights Reserved
+
+ Permission to use, copy, modify, and distribute this software and
+its documentation for any purpose and without fee is hereby
+granted, provided that the above copyright notice appears in all
+copies and that both the copyright notice and this permission notice
+appear in supporting documentation, and that the name of Olivetti
+not be used in advertising or publicity pertaining to distribution
+of the software without specific, written prior permission.
+
+ OLIVETTI DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
+IN NO EVENT SHALL OLIVETTI BE LIABLE FOR ANY SPECIAL, INDIRECT, OR
+CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT,
+NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUR OF OR IN CONNECTION
+WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+
+/* $ Header: $ */
+
+
+#include <mach/machine/asm.h>
+
+/*
+ * Function: kd_slmwd()
+ *
+ * This function "slams" a word (char/attr) into the screen memory using
+ * a block fill operation on the 386.
+ *
+ */
+
+#define start B_ARG0
+#define count B_ARG1
+#define value %dx // B_ARG2
+
+ENTRY(kd_slmwd)
+ pushq %rbp
+ movq %rsp, %rbp
+
+ # start already in %rdi
+ movq count, %rcx
+ movw value, %ax
+ cld
+ rep
+ stosw
+
+ leave
+ ret
+#undef start
+#undef count
+#undef value
+
+/*
+ * "slam up"
+ */
+
+#define from B_ARG0
+#define to B_ARG1
+#define count %dx // B_ARG2
+ENTRY(kd_slmscu)
+ pushq %rbp
+ movq %rsp, %rbp
+
+ xchgq %rsi, %rdi
+ movq count, %rcx
+ cmpq %rdi, %rsi
+ cld
+ rep
+ movsw
+
+ leave
+ ret
+
+/*
+ * "slam down"
+ */
+ENTRY(kd_slmscd)
+ pushq %rbp
+ movq %rsp, %rbp
+
+ xchgq %rsi, %rdi
+ movq count, %rcx
+ cmpq %rdi, %rsi
+ std
+ rep
+ movsw
+ cld
+
+ leave
+ ret
+#undef from
+#undef to
+#undef count