683d5bf1d2
* module/language/c99/compiler.mes (expr->base*): New function. (expr->accu): Use it to have value in accu for assignments. * scaffold/tests/77-pointer-assign.c (test): Test it. * stage0/x86.M1 (mov____%ecx,(%edx), mov___(%eax),%ecx): New define. * module/mes/as-i386.mes (accu-mem->base->mem): New function. (i386:byte-base->accu-mem+n): (i386:byte-base->accu-mem): (i386:base-mem->accu-mem): (i386:base->accu-mem): (i386:value->accu-mem+n): (i386:value->accu-mem): (i386:accu->base-mem+n): (i386:byte-accu->base-mem): (i386:accu->base-mem): Rename from accu-address, base-address. Update callers. * module/mes/as-i386.scm (mes): Update exports.
174 lines
5 KiB
Plaintext
174 lines
5 KiB
Plaintext
### Mes --- Maxwell Equations of Software
|
|
### Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
|
|
###
|
|
### This file is part of Mes.
|
|
###
|
|
### Mes is free software# you can redistribute it and/or modify it
|
|
### under the terms of the GNU General Public License as published by
|
|
### the Free Software Foundation# either version 3 of the License, or (at
|
|
### your option) any later version.
|
|
###
|
|
### Mes is distributed in the hope that it will be useful, but
|
|
### WITHOUT ANY WARRANTY# without even the implied warranty of
|
|
### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
### GNU General Public License for more details.
|
|
###
|
|
### You should have received a copy of the GNU General Public License
|
|
### along with Mes. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
DEFINE add____$i32,%eax 05
|
|
DEFINE add____$i32,%ecx 81c1
|
|
DEFINE add____$i32,%edx 81c2
|
|
DEFINE add____$i32,(%eax) 8100
|
|
DEFINE add____$i32,0x32(%eax) 8180
|
|
DEFINE add____$i32,0x32(%ebp) 8185
|
|
DEFINE add____$i8,%eax 83c0
|
|
DEFINE add____$i8,%edx 83c2
|
|
DEFINE add____$i8,%esp 83c4
|
|
DEFINE add____$i8,(%eax) 8300
|
|
DEFINE add____$i8,0x32 8305
|
|
DEFINE add____$i8,0x32(%eax) 8380
|
|
DEFINE add____$i8,0x32(%eax) 8380
|
|
DEFINE add____$i8,0x32(%ebp) 8385
|
|
DEFINE add____$i8,0x8(%eax) 8340
|
|
DEFINE add____$i8,0x8(%ebp) 8345
|
|
DEFINE add____%eax,%eax 01c0
|
|
DEFINE add____%ebp,%eax 01e8
|
|
DEFINE add____%edx,%eax 01d0
|
|
DEFINE add____%edx,%eax 01d0
|
|
DEFINE and____%edx,%eax 21d0
|
|
DEFINE call32 e8
|
|
DEFINE call___*%eax ffd0
|
|
DEFINE cmp____$0x32,%eax 3d
|
|
DEFINE cmp____$i32,%eax 3d
|
|
DEFINE cmp____$i32,0x32(%ebp) 81bd
|
|
DEFINE cmp____$i32,0x8(%ebp) 817d
|
|
DEFINE cmp____$i8,%eax 83f8
|
|
DEFINE cmp____$i8,0x32(%ebp) 83bd
|
|
DEFINE cmp____$i8,0x8(%ebp) 837d
|
|
DEFINE cmp____%al,%dl 38c2
|
|
DEFINE cmp____%edx,%eax 39d0
|
|
DEFINE idiv___%ebx f7fb
|
|
DEFINE int____$0x80 cd80
|
|
DEFINE je32 0f84
|
|
DEFINE jg32 0f8f
|
|
DEFINE jge32 0f8d
|
|
DEFINE jmp32 e9
|
|
DEFINE jne32 0f85
|
|
DEFINE je8 74
|
|
DEFINE lahf 9f
|
|
DEFINE lea____0x32(%ebp),%eax 8d85
|
|
DEFINE lea____0x32(%ebp),%edx 8d95
|
|
DEFINE lea____0x8(%ebp),%eax 8d45
|
|
DEFINE lea____0x8(%ebp),%edx 8d55
|
|
DEFINE leave c9
|
|
DEFINE mov____$i32,%eax b8
|
|
DEFINE mov____$i32,%ebx bb
|
|
DEFINE mov____$i32,%ecx b9
|
|
DEFINE mov____$i32,%edx ba
|
|
DEFINE mov____$i32,(%eax) c700
|
|
DEFINE mov____$i32,0x32 c705
|
|
DEFINE mov____$i32,0x8(%eax) c740
|
|
DEFINE mov____$i32,0x8(%ebp) c745
|
|
DEFINE mov____%al,(%edx) 8802
|
|
DEFINE mov____%dl,(%eax) 8810
|
|
DEFINE mov____%dl,0x8(%eax) 8850
|
|
DEFINE mov____%eax,%ebx 89c3
|
|
DEFINE mov____%eax,%edx 89c2
|
|
DEFINE mov____%eax,(%ecx) 8901
|
|
DEFINE mov____%eax,(%edx) 8902
|
|
DEFINE mov____%eax,0x32 a3
|
|
DEFINE mov____%eax,0x32(%ebp) 8985
|
|
DEFINE mov____%eax,0x32(%edx) 8982
|
|
DEFINE mov____%eax,0x8(%ebp) 8945
|
|
DEFINE mov____%eax,0x8(%edx) 8942
|
|
DEFINE mov____%ebp,%eax 89e8
|
|
DEFINE mov____%ebp,%ecx 89e9
|
|
DEFINE mov____%ebp,%edx 89ea
|
|
DEFINE mov____%ecx,(%eax) 8908
|
|
DEFINE mov____%ecx,(%edx) 890a
|
|
DEFINE mov____%edx,%eax 89d0
|
|
DEFINE mov____%edx,%ebx 89d3
|
|
DEFINE mov____%edx,%ecx 89d1
|
|
DEFINE mov____%edx,(%eax) 8910
|
|
DEFINE mov____%edx,0x32(%ebp) 8995
|
|
DEFINE mov____%edx,0x8(%ebp) 8955
|
|
DEFINE mov____%esp,%ebp 89e5
|
|
DEFINE mov____(%eax),%eax 8b00
|
|
DEFINE mov____(%eax),%ecx 8b08
|
|
DEFINE mov____(%edx),%ecx 8b0a
|
|
DEFINE mov____(%edx),%edx 8b12
|
|
DEFINE mov____0x32(%eax),%eax 8b80
|
|
DEFINE mov____0x32(%ebp),%eax 8b85
|
|
DEFINE mov____0x32(%ebp),%eax 8b85
|
|
DEFINE mov____0x32(%ebp),%ebx 8b9d
|
|
DEFINE mov____0x32(%ebp),%ecx 8b8d
|
|
DEFINE mov____0x32(%ebp),%edx 8b95
|
|
DEFINE mov____0x32(%ebp),%edx 8b95
|
|
DEFINE mov____0x32,%eax a1
|
|
DEFINE mov____0x32,%edx 8b15
|
|
DEFINE mov____0x8(%eax),%eax 8b40
|
|
DEFINE mov____0x8(%ebp),%eax 8b45
|
|
DEFINE mov____0x8(%ebp),%ebx 8b5d
|
|
DEFINE mov____0x8(%ebp),%ecx 8b4d
|
|
DEFINE mov____0x8(%ebp),%edx 8b55
|
|
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_0x8(%ebp),%eax 0fb645
|
|
DEFINE movzbl_0x8(%ebp),%edx 0fb655
|
|
DEFINE mul____%edx f7e2
|
|
DEFINE nop 90
|
|
DEFINE not____%eax f7d0
|
|
DEFINE or_____%edx,%eax 09d0
|
|
DEFINE pop____%eax 58
|
|
DEFINE pop____%edx 5a
|
|
DEFINE push___$i32 68
|
|
DEFINE push___%eax 50
|
|
DEFINE push___%ebp 55
|
|
DEFINE push___%edx 52
|
|
DEFINE push___(%eax) ff30
|
|
DEFINE push___0x32(%ebp) ffb5
|
|
DEFINE push___0x8(%ebp) ff75
|
|
DEFINE ret c3
|
|
DEFINE sahf 9e
|
|
DEFINE sete___%al 0f94c0
|
|
DEFINE setne__%al 0f95c0
|
|
DEFINE shl____$i8,%eax c1e0
|
|
DEFINE shl____%cl,%eax d3e0
|
|
DEFINE shr____%cl,%eax d3e8
|
|
DEFINE sub____%al,%dl 28d0
|
|
DEFINE sub____%dl,%al 28c2
|
|
DEFINE sub____%eax,%edx 29c2
|
|
DEFINE sub____%edx,%eax 29d0
|
|
DEFINE sub____%edx,%eax 29d0
|
|
DEFINE sub____%esp,$i32 81ec
|
|
DEFINE sub____%esp,$i8 83ec
|
|
DEFINE test___%al,%al 84c0
|
|
DEFINE test___%eax,%eax 85c0
|
|
DEFINE xchg___%eax,(%esp) 870424
|
|
DEFINE xor____$i32,%eax 35
|
|
DEFINE xor____$i8,%ah 80f4
|
|
DEFINE xor____%eax,%eax 31c0
|
|
DEFINE xor____%ebx,%ebx 31db
|
|
DEFINE xor____%ecx,%ecx 31c9
|
|
DEFINE xor____%edx,%eax 31d0
|
|
DEFINE xor____%edx,%edx 31d2
|
|
|
|
|
|
|
|
DEFINE SYS_exit 01000000
|
|
DEFINE SYS_read 03000000
|
|
DEFINE SYS_write 04000000
|
|
DEFINE SYS_open 05000000
|
|
DEFINE SYS_close 06000000
|
|
DEFINE SYS_unlink 0a000000
|
|
DEFINE SYS_lseek 13000000
|
|
DEFINE SYS_access 21000000
|
|
DEFINE SYS_brk 2d000000
|
|
DEFINE SYS_fsync 76000000
|
|
DEFINE SYS_getcwd b7000000
|