core: Support fork, waitpid, execve.
[mes.git] / stage0 / x86.M1
index c3bfd43990b3ca95d1a67cac4898d6c0ec73c4e2..3c1e0f6fb8cb2474ce67cfa5dd3f500c0f02bf1b 100644 (file)
@@ -1,5 +1,5 @@
 ### Mes --- Maxwell Equations of Software
-### Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+### Copyright © 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ###
 ### This file is part of Mes.
 ###
@@ -37,7 +37,9 @@ DEFINE add____%eax,%eax 01c0
 DEFINE add____%ebp,%eax 01e8
 DEFINE add____%edx,%eax 01d0
 DEFINE add____%edx,%eax 01d0
+DEFINE and____$i32,%eax 25
 DEFINE and____%edx,%eax 21d0
+DEFINE and____(%edx),%eax 2302
 DEFINE call32 e8
 DEFINE call___*%eax ffd0
 DEFINE cmp____$0x32,%eax 3d
@@ -51,8 +53,12 @@ DEFINE cmp____%al,%dl 38c2
 DEFINE cmp____%edx,%eax 39d0
 DEFINE hlt f4
 DEFINE idiv___%ebx f7fb
-DEFINE int____$0x80 cd80
 DEFINE int cd
+DEFINE int____$0x80 cd80
+DEFINE ja32  0f87
+DEFINE jae32 0f83
+DEFINE jb32  0f82
+DEFINE jbe32 0f86
 DEFINE je32 0f84
 DEFINE je8 74
 DEFINE jg32 0f8f
@@ -60,6 +66,7 @@ DEFINE jge32 0f8d
 DEFINE jl32 0f8c
 DEFINE jle32 0f8e
 DEFINE jmp32 e9
+DEFINE jmp____*%ebx ffe3
 DEFINE jne32 0f85
 DEFINE lahf 9f
 DEFINE lea____0x32(%ebp),%eax 8d85
@@ -111,6 +118,7 @@ DEFINE mov____%edx,0x8(%ebp) 8955
 DEFINE mov____%esp,%ebp 89e5
 DEFINE mov____(%eax),%eax 8b00
 DEFINE mov____(%eax),%ecx 8b08
+DEFINE mov____(%edx),%eax 8b02
 DEFINE mov____(%edx),%ecx 8b0a
 DEFINE mov____(%edx),%edx 8b12
 DEFINE mov____0x32(%eax),%eax 8b80
@@ -128,26 +136,32 @@ DEFINE mov____0x8(%eax),%eax 8b40
 DEFINE mov____0x8(%eax),%ebx 8b58
 DEFINE mov____0x8(%eax),%ecx 8b48
 DEFINE mov____0x8(%ebp),%eax 8b45
+DEFINE mov____0x8(%ebp),%ebp 8b6d
 DEFINE mov____0x8(%ebp),%ebx 8b5d
 DEFINE mov____0x8(%ebp),%ecx 8b4d
 DEFINE mov____0x8(%ebp),%edx 8b55
+DEFINE mov____0x8(%ebp),%esp 8b65
+DEFINE movsbl_%al,%eax 0fbec0
+DEFINE movswl_%ax,%eax 0fbfc0
+DEFINE movzbl_%al,%eax 0fb6c0
 DEFINE movzbl_%al,%eax 0fb6c0
 DEFINE movzbl_%dl,%edx 0fb6d2
 DEFINE movzbl_(%eax),%eax 0fb600
 DEFINE movzbl_(%eax),%edx 0fb610
 DEFINE movzbl_(%edx),%edx 0fb612
 DEFINE movzbl_0x32(%eax),%eax 0fb680
-DEFINE movzbl_0x32(%ebp),%eax 0fb685
 DEFINE movzbl_0x8(%eax),%eax 0fb640
 DEFINE movzbl_0x8(%ebp),%eax 0fb645
-DEFINE movzbl_0x8(%ebp),%edx 0fb655
+DEFINE movzwl_%ax,%eax 0fb7c0
 DEFINE movzwl_(%eax),%eax 0fb700
 DEFINE movzwl_0x32(%eax),%eax 0fb780
+DEFINE movzwl_0x32(%ebp),%eax 0fb785
 DEFINE movzwl_0x8(%eax),%eax 0fb740
 DEFINE mul____%edx f7e2
 DEFINE nop 90
 DEFINE not____%eax f7d0
 DEFINE or_____%edx,%eax 09d0
+DEFINE or_____(%edx),%eax 0b02
 DEFINE pop____%eax 58
 DEFINE pop____%edx 5a
 DEFINE push___$i32 68
@@ -159,6 +173,10 @@ DEFINE push___0x32(%ebp) ffb5
 DEFINE push___0x8(%ebp) ff75
 DEFINE ret c3
 DEFINE sahf 9e
+DEFINE seta___%al 0f97c0
+DEFINE setae__%al 0f93c0
+DEFINE setb___%al 0f92c0
+DEFINE setbe__%al 0f96c0
 DEFINE sete___%al 0f94c0
 DEFINE setg___%al 0f9fc0
 DEFINE setge__%al 0f9dc0
@@ -186,14 +204,29 @@ DEFINE xor____%ecx,%ecx 31c9
 DEFINE xor____%edx,%eax 31d0
 DEFINE xor____%edx,%edx 31d2
 
+# Deprecated.  Remove after 0.14 release.
+DEFINE mov____%al,0x32(%ebp) 8885
+DEFINE mov____%al,0x8(%ebp) 8845
+DEFINE mov____%ax,0x32(%ebp) 668985
+DEFINE mov____%ax,0x8(%ebp) 668945
+DEFINE movzbl_0x32(%ebp),%eax 0fb685
+DEFINE movzbl_0x8(%ebp),%edx 0fb655
+DEFINE movzwl_0x8(%ebp),%eax 0fb745
+DEFINE movzwl_0x8(%ebp),%eax 0fb745
+
 DEFINE SYS_exit   01000000
+DEFINE SYS_fork   02000000
 DEFINE SYS_read   03000000
 DEFINE SYS_write  04000000
 DEFINE SYS_open   05000000
 DEFINE SYS_close  06000000
+DEFINE SYS_waitpid 07000000
 DEFINE SYS_unlink 0a000000
+DEFINE SYS_execve 0b000000
+DEFINE SYS_chmod  0f000000
 DEFINE SYS_lseek  13000000
 DEFINE SYS_access 21000000
 DEFINE SYS_brk    2d000000
+DEFINE SYS_ioctl  36000000
 DEFINE SYS_fsync  76000000
 DEFINE SYS_getcwd b7000000