From 5d12d66d17cb8b4de4c3238d01186539b16508d2 Mon Sep 17 00:00:00 2001 From: julianb0 Date: Mon, 3 Jun 2019 15:16:11 +0200 Subject: [PATCH] mov.c, INSTRS --- dos/main.k | 2 + dos/str/strchr.k | 18 +++++++ dos/str/string.k | 1 + pc/instrs/INSTRS | 123 +++++++++++++++++++++++++++++++++++++++++++++++ pc/instrs/mov.c | 41 +++++++++++++++- 5 files changed, 184 insertions(+), 1 deletion(-) create mode 100644 dos/str/strchr.k diff --git a/dos/main.k b/dos/main.k index 1abc656..c912194 100644 --- a/dos/main.k +++ b/dos/main.k @@ -28,6 +28,8 @@ main: mov ax1, .msg call strcmp + movt rax, rbx + leave ret diff --git a/dos/str/strchr.k b/dos/str/strchr.k new file mode 100644 index 0000000..e86b047 --- /dev/null +++ b/dos/str/strchr.k @@ -0,0 +1,18 @@ +; The OS/K Team licenses this file to you under the MIT license. +; See the LICENSE file in the project root for more information. + +; +; char *strchrnul(const char *str, int ch) +; +strchrnul: + + ret + +; +; char *strchr(const char *str, int ch) +; +strchr: + call strchrnul + test b[rax], b[rax] + cmovz rax, 0 + ret diff --git a/dos/str/string.k b/dos/str/string.k index 866140c..25306dc 100644 --- a/dos/str/string.k +++ b/dos/str/string.k @@ -5,4 +5,5 @@ include "str/strlen.k" include "str/strrev.k" include "str/strcpy.k" include "str/strcmp.k" +include "str/strchr.k" diff --git a/pc/instrs/INSTRS b/pc/instrs/INSTRS index a43efe0..3edac38 100644 --- a/pc/instrs/INSTRS +++ b/pc/instrs/INSTRS @@ -107,6 +107,7 @@ cloopnz ri # Movement instructions # +<<<<<<< Updated upstream lea rm m mov rm rim xchg rm rim @@ -121,6 +122,128 @@ cleanz rm m cmovnz rm rim cxchgnz rm rim ccmpxchgnz rm rim +======= +mov r r +mov r i +mov r m +mov m r +mov m i +mov m m +cmovz r r +cmovz r i +cmovz r m +cmovz m r +cmovz m i +cmovz m m +cmovnz r r +cmovnz r i +cmovnz r m +cmovnz m r +cmovnz m i +cmovnz m m + +movb r r +movb r i +movb r m +movb m r +movb m i +movb m m +cmovbz r r +cmovbz r i +cmovbz r m +cmovbz m r +cmovbz m i +cmovbz m m +cmovbnz r r +cmovbnz r i +cmovbnz r m +cmovbnz m r +cmovbnz m i +cmovbnz m m + +movw r r +movw r i +movw r m +movw m r +movw m i +movw m m +cmovwz r r +cmovwz r i +cmovwz r m +cmovwz m r +cmovwz m i +cmovwz m m +cmovwnz r r +cmovwnz r i +cmovwnz r m +cmovwnz m r +cmovwnz m i +cmovwnz m m + +movl r r +movl r i +movl r m +movl m r +movl m i +movl m m +cmovlz r r +cmovlz r i +cmovlz r m +cmovlz m r +cmovlz m i +cmovlz m m +cmovlnz r r +cmovlnz r i +cmovlnz r m +cmovlnz m r +cmovlnz m i +cmovlnz m m + +movt r r +movt r i +movt r m +movt m r +movt m i +movt m m +cmovtz r r +cmovtz r i +cmovtz r m +cmovtz m r +cmovtz m i +cmovtz m m +cmovtnz r r +cmovtnz r i +cmovtnz r m +cmovtnz m r +cmovtnz m i +cmovtnz m m + +xchg r r +xchg r i +xchg r m +xchg m r +xchg m i +xchg m m +cxchgz r r +cxchgz r i +cxchgz r m +cxchgz m r +cxchgz m i +cxchgz m m +cxchgnz r r +cxchgnz r i +cxchgnz r m +cxchgnz m r +cxchgnz m i +cxchgnz m m + +lea r m +lea m m +cleaz r m +cleaz m m +cleanz r m +cleanz m m +>>>>>>> Stashed changes # # Stack manipulation instructions diff --git a/pc/instrs/mov.c b/pc/instrs/mov.c index ec7596e..ebc1f38 100644 --- a/pc/instrs/mov.c +++ b/pc/instrs/mov.c @@ -4,11 +4,22 @@ #include "instrs.h" #include "arch_i.h" -IMPL_COND(mov); IMPL_COND(lea); +IMPL_COND(mov); +IMPL_COND(movb); +IMPL_COND(movw); +IMPL_COND(movl); +IMPL_COND(movt); IMPL_COND(xchg); IMPL_COND(cmpxchg); +/* +IMPL_COND(xchgb); +IMPL_COND(xchgw); +IMPL_COND(xchgl); +IMPL_COND(xchgt); +*/ + // // Movement instructions // @@ -19,6 +30,34 @@ IMPL_START_2(mov) } IMPL_OUT; +IMPL_START_2(movb) +{ + v1 = (v1 & 0xFFFFFFFFFFFFFF00) + | (v2 & 0x00000000000000FF); +} +IMPL_OUT; + +IMPL_START_2(movw) +{ + v1 = (v1 & 0xFFFFFFFFFFFF0000) + | (v2 & 0x000000000000FFFF); +} +IMPL_OUT; + +IMPL_START_2(movl) +{ + v1 = (v1 & 0xFFFFFFFF00000000) + | (v2 & 0x00000000FFFFFFFF); +} +IMPL_OUT; + +IMPL_START_2(movt) +{ + v1 = (v1 & 0xFFFF000000000000) + | (v2 & 0x0000FFFFFFFFFFFF); +} +IMPL_OUT; + IMPL_START_2(xchg) { ulong t = v1;