From ef99073b2346b898ddeeb49ad5e5888c2f3f046b Mon Sep 17 00:00:00 2001 From: Redo Date: Tue, 15 Nov 2022 11:37:37 -0600 Subject: [PATCH] fix adder cout --- sim/compiled_sim.dll | Bin 126853 -> 126853 bytes sim/compiled_sim_gates.c | 12 ++++++------ sim/dump.txt | 12 ++++++------ sim/gencfuncs.lua | 2 +- sim/network.lua | 2 +- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/sim/compiled_sim.dll b/sim/compiled_sim.dll index eda80028e70f21215f79d9523365529d216413b0..754d2617a777fcb683796262b11908e2cf721006 100644 GIT binary patch delta 78 zcmZp@&)#~UeL@Fw@VVlN-M&l(ksEJiax=1ScHy}q#+bBOQdxtMkz=!yiZ&A?-{w5E hPDVzl%|FyznHY_l>$JAlX)(45g7j`@w_&W?3;;Cm8R7r{ delta 78 zcmZp@&)#~UeL@Gb=hC8y-M&nbOdD@yax=1QcHy}q#+bNSQdxtMk$tn1iZ&A?@8&$U hPDVz_%|FyznHUY5>$JAlX)(45g7j`@w_&W?3;+s083q6V diff --git a/sim/compiled_sim_gates.c b/sim/compiled_sim_gates.c index 830a49a..37a2ab3 100644 --- a/sim/compiled_sim_gates.c +++ b/sim/compiled_sim_gates.c @@ -205,12 +205,12 @@ GATEFUNC(Demux5) { int pa = getdata(0); if(getport(38)) { int a = getword(5, 1) GATEFUNC(Demux6) { int pa = getdata(0); if(getport(71)) { int a = getword(6, 1) + 7; if(pa != a) { if(pa) { setport(pa, 0); } setport(a, 1); setdata(0, a); } } else { if(pa) { setport(pa, 0); setdata(0, 0); } } } GATEFUNC(Demux7) { int pa = getdata(0); if(getport(136)) { int a = getword(7, 1) + 8; if(pa != a) { if(pa) { setport(pa, 0); } setport(a, 1); setdata(0, a); } } else { if(pa) { setport(pa, 0); setdata(0, 0); } } } GATEFUNC(Demux8) { int pa = getdata(0); if(getport(265)) { int a = getword(8, 1) + 9; if(pa != a) { if(pa) { setport(pa, 0); } setport(a, 1); setdata(0, a); } } else { if(pa) { setport(pa, 0); setdata(0, 0); } } } -GATEFUNC(Adder1) { int v = getword(1, 1) + getword(1, 2) + getport(4); setword(1, 3, v); setport(4, (v>>1) & 1); } -GATEFUNC(Adder2) { int v = getword(2, 1) + getword(2, 3) + getport(7); setword(2, 5, v); setport(7, (v>>2) & 1); } -GATEFUNC(Adder4) { int v = getword(4, 1) + getword(4, 5) + getport(13); setword(4, 9, v); setport(13, (v>>4) & 1); } -GATEFUNC(Adder8) { int v = getword(8, 1) + getword(8, 9) + getport(25); setword(8, 17, v); setport(25, (v>>8) & 1); } -GATEFUNC(Adder16) { int v = getword(16, 1) + getword(16, 17) + getport(49); setword(16, 33, v); setport(49, (v>>16) & 1); } -GATEFUNC(Adder32) { unsigned long long v = getword(32, 1) + getword(32, 33) + getport(97); setword(32, 65, v); setport(97, (v>>32) & 1); } +GATEFUNC(Adder1) { int v = getword(1, 1) + getword(1, 2) + getport(4); setword(1, 3, v); setport(5, (v>>1) & 1); } +GATEFUNC(Adder2) { int v = getword(2, 1) + getword(2, 3) + getport(7); setword(2, 5, v); setport(8, (v>>2) & 1); } +GATEFUNC(Adder4) { int v = getword(4, 1) + getword(4, 5) + getport(13); setword(4, 9, v); setport(14, (v>>4) & 1); } +GATEFUNC(Adder8) { int v = getword(8, 1) + getword(8, 9) + getport(25); setword(8, 17, v); setport(26, (v>>8) & 1); } +GATEFUNC(Adder16) { int v = getword(16, 1) + getword(16, 17) + getport(49); setword(16, 33, v); setport(50, (v>>16) & 1); } +GATEFUNC(Adder32) { unsigned long long v = getword(32, 1) + getword(32, 33) + getport(97); setword(32, 65, v); setport(98, (v>>32) & 1); } GATEFUNC(Rom4x1) { if(getport(6)) { int a = getword(4, 1); for(int i=0; i<1; i++) { setport(5+i, getdata(a + i*16)); } } else { clearword(1, 5); } } GATEFUNC(Rom4x4) { if(getport(9)) { int a = getword(4, 1); for(int i=0; i<4; i++) { setport(5+i, getdata(a + i*16)); } } else { clearword(4, 5); } } GATEFUNC(Rom4x8) { if(getport(13)) { int a = getword(4, 1); for(int i=0; i<8; i++) { setport(5+i, getdata(a + i*16)); } } else { clearword(8, 5); } } diff --git a/sim/dump.txt b/sim/dump.txt index f2d0159..0b25620 100644 --- a/sim/dump.txt +++ b/sim/dump.txt @@ -500,7 +500,7 @@ Disassembly of section .text: 66341638: 45 89 19 mov %r11d,(%r9) 6634163b: 49 89 14 c2 mov %rdx,(%r10,%rax,8) 6634163f: 41 d1 f8 sar %r8d - 66341642: ba 04 00 00 00 mov $0x4,%edx + 66341642: ba 05 00 00 00 mov $0x5,%edx 66341647: 41 83 e0 01 and $0x1,%r8d 6634164b: 5b pop %rbx 6634164c: e9 5f fd ff ff jmpq 663413b0 @@ -2225,7 +2225,7 @@ Disassembly of section .text: 66342d09: 48 83 f9 20 cmp $0x20,%rcx 66342d0d: 0f 85 6d ff ff ff jne 66342c80 66342d13: 49 c1 e8 3f shr $0x3f,%r8 - 66342d17: ba 61 00 00 00 mov $0x61,%edx + 66342d17: ba 62 00 00 00 mov $0x62,%edx 66342d1c: 4c 89 d1 mov %r10,%rcx 66342d1f: 5b pop %rbx 66342d20: 5e pop %rsi @@ -2321,7 +2321,7 @@ Disassembly of section .text: 66342e35: 44 89 0b mov %r9d,(%rbx) 66342e38: 48 89 14 c6 mov %rdx,(%rsi,%rax,8) 66342e3c: 41 c1 f8 02 sar $0x2,%r8d - 66342e40: ba 07 00 00 00 mov $0x7,%edx + 66342e40: ba 08 00 00 00 mov $0x8,%edx 66342e45: 41 83 e0 01 and $0x1,%r8d 66342e49: 5b pop %rbx 66342e4a: 5e pop %rsi @@ -2492,7 +2492,7 @@ Disassembly of section .text: 66343061: 45 89 0a mov %r9d,(%r10) 66343064: 48 89 14 c3 mov %rdx,(%rbx,%rax,8) 66343068: 41 c1 f8 04 sar $0x4,%r8d - 6634306c: ba 0d 00 00 00 mov $0xd,%edx + 6634306c: ba 0e 00 00 00 mov $0xe,%edx 66343071: 41 83 e0 01 and $0x1,%r8d 66343075: 5b pop %rbx 66343076: 5e pop %rsi @@ -2611,7 +2611,7 @@ Disassembly of section .text: 663431e8: 48 83 f9 08 cmp $0x8,%rcx 663431ec: 0f 85 6e ff ff ff jne 66343160 663431f2: 41 c1 f8 08 sar $0x8,%r8d - 663431f6: ba 19 00 00 00 mov $0x19,%edx + 663431f6: ba 1a 00 00 00 mov $0x1a,%edx 663431fb: 48 89 d9 mov %rbx,%rcx 663431fe: 41 83 e0 01 and $0x1,%r8d 66343202: 5b pop %rbx @@ -2798,7 +2798,7 @@ Disassembly of section .text: 6634346e: 48 83 f9 10 cmp $0x10,%rcx 66343472: 0f 85 68 ff ff ff jne 663433e0 66343478: 41 c1 f8 10 sar $0x10,%r8d - 6634347c: ba 31 00 00 00 mov $0x31,%edx + 6634347c: ba 32 00 00 00 mov $0x32,%edx 66343481: 48 89 d9 mov %rbx,%rcx 66343484: 41 83 e0 01 and $0x1,%r8d 66343488: 5b pop %rbx diff --git a/sim/gencfuncs.lua b/sim/gencfuncs.lua index 4ee0b5e..2084bd5 100644 --- a/sim/gencfuncs.lua +++ b/sim/gencfuncs.lua @@ -73,7 +73,7 @@ local function createDFF (n) return { name = "DFF" ..n, names = {"D FlipFl local function createMux(n) return { name = "Mux"..n, names = {"Mux "..n.." Bit", "Mux "..n.." Bit Vertical"}, func = "if(getport("..(n+math.pow(2,n)+1)..")) { setport("..(n+math.pow(2,n)+2)..", getport(getword("..n..", 1)+"..(n+1)..")); } else { setport("..(n+math.pow(2,n)+2)..", 0); }" } end local function createDemux(n) return { name = "Demux"..n, names = {"Demux "..n.." Bit", "Demux "..n.." Bit Vertical"}, size = 1, func = "int pa = getdata(0); if(getport("..(n+math.pow(2,n)+1)..")) { int a = getword("..n..", 1) + "..(n+1).."; if(pa != a) { if(pa) { setport(pa, 0); } setport(a, 1); setdata(0, a); } } else { if(pa) { setport(pa, 0); setdata(0, 0); } }" } end local function createRom(x, y, z) local w = log2(x*y); return { name = "Rom"..w.."x"..z, names = {"ROM "..x.."x"..y..(z>1 and ("x"..z) or "")}, size = x*y*z, func="if(getport("..(w+z+1)..")) { int a = getword("..w..", 1); for(int i=0; i<"..z.."; i++) { setport("..(w+1).."+i, getdata(a + i*"..(x*y)..")); } } else { clearword("..z..", "..(w+1).."); }" } end -local function createAdder(n) return { name = "Adder"..n, names = {"Adder "..n.." Bit"}, func = (n>=32 and "unsigned long long" or "int").." v = getword("..n..", 1) + getword("..n..", "..(n+1)..") + getport("..(n*3+1).."); setword("..n..", "..(n*2+1)..", v); setport("..(n*3+1)..", (v>>"..n..") & 1);" } end +local function createAdder(n) return { name = "Adder"..n, names = {"Adder "..n.." Bit"}, func = (n>=32 and "unsigned long long" or "int").." v = getword("..n..", 1) + getword("..n..", "..(n+1)..") + getport("..(n*3+1).."); setword("..n..", "..(n*2+1)..", v); setport("..(n*3+2)..", (v>>"..n..") & 1);" } end local romsizes = { -- copied from brick gen -- 1 bit data 4 bit data 8 bit data 16 bit data 32 bit data 48 bit data 64 bit data diff --git a/sim/network.lua b/sim/network.lua index a4e6b15..d1759b5 100644 --- a/sim/network.lua +++ b/sim/network.lua @@ -75,7 +75,7 @@ function network_update() local logic = data[i+5] local input = data[i+6] local global = data[i+7] - local numports = tonumber(data[i+8]) or error("no portcount for gate "..(objref)) + local numports = tonumber(data[i+8]) i = i + 8 local ports = {}