From c33516fed3e79f30fa45d94988a68737d49fae2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Kokosi=C5=84ski?= Date: Tue, 25 Jun 2024 17:07:32 +0200 Subject: [PATCH] gcc: add more in-memory registers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Filip KokosiƄski --- c-print-array/main.c | 18 +++++++++--------- c-print-fibonacci/main.c | 6 +++--- c-print-for-loop/main.c | 14 +++++++------- c-print-struct/main.c | 11 ++++++----- c-print-x/main.c | 17 +++++++++-------- c-test-arith/main.c | 14 +++++++------- c-test-comparison/main.c | 14 +++++++------- c-test-recursion/main.c | 14 +++++++------- pdp1-gcc | 2 +- 9 files changed, 56 insertions(+), 54 deletions(-) diff --git a/c-print-array/main.c b/c-print-array/main.c index 023adca..e25b83f 100644 --- a/c-print-array/main.c +++ b/c-print-array/main.c @@ -7,10 +7,10 @@ static int i = 0; void _start(void) { /* TODO: handle sp/fp init better -- separate crt0.S? */ - asm ("law 03000"); - asm ("dac 209"); - asm ("law 04000"); - asm ("dac 208"); + asm volatile ("law 03000"); + asm volatile ("dac 0131"); + asm volatile ("law 04000"); + asm volatile ("dac 0130"); /* check with no iterators */ putc(x[0]); @@ -23,19 +23,19 @@ void _start(void) /* check with local iterator w/o func call */ for (int j = 0; j < 3; j++) { - asm ("lio %0" : : "r"(x[j])); - asm ("tyo"); + asm volatile ("lio %0" : : "r"(x[j]) : "$io"); + asm volatile ("tyo"); } /* check with local iterator w/ func call */ for (int j = 0; j < 3; j++) putc(x[j]); - asm ("hlt"); + asm volatile ("hlt"); __builtin_unreachable(); } static void putc(int c) { - asm ("lio %0" : : "r"(c)); - asm ("tyo"); + asm volatile ("lio %0" : : "r"(c) : "$io"); + asm volatile ("tyo"); } diff --git a/c-print-fibonacci/main.c b/c-print-fibonacci/main.c index 6cd2b4c..154e163 100644 --- a/c-print-fibonacci/main.c +++ b/c-print-fibonacci/main.c @@ -7,9 +7,9 @@ static int fib(int); void _start(void) { asm volatile ("law 04000"); - asm volatile ("dac 209"); + asm volatile ("dac 0131"); asm volatile ("law 03000"); - asm volatile ("dac 208"); + asm volatile ("dac 0130"); int n; @@ -24,7 +24,7 @@ void _start(void) static void putc(int c) { - asm volatile ("lio %0" : : "r"(c) : "io"); + asm volatile ("lio %0" : : "r"(c) : "$io"); asm volatile ("tyo"); } diff --git a/c-print-for-loop/main.c b/c-print-for-loop/main.c index 0f883f0..0730440 100644 --- a/c-print-for-loop/main.c +++ b/c-print-for-loop/main.c @@ -3,10 +3,10 @@ static int get_char(int); void _start(void) { - asm ("law 04000"); - asm ("dac 209"); - asm ("law 03000"); - asm ("dac 208"); + asm volatile ("law 04000"); + asm volatile ("dac 0131"); + asm volatile ("law 03000"); + asm volatile ("dac 0130"); int c; @@ -15,13 +15,13 @@ void _start(void) putc(c); } - asm ("hlt"); + asm volatile ("hlt"); __builtin_unreachable(); } static void putc(int c) { - asm ("lio %0" : : "r"(c)); - asm ("tyo"); + asm volatile ("lio %0" : : "r"(c) : "$io"); + asm volatile ("tyo"); } static int get_char(int c) diff --git a/c-print-struct/main.c b/c-print-struct/main.c index d87abd4..26ec73b 100644 --- a/c-print-struct/main.c +++ b/c-print-struct/main.c @@ -8,9 +8,10 @@ static struct { void _start(void) { - asm ("law 04000"); - asm ("dac 209"); - asm ("dac 208"); + asm volatile ("law 04000"); + asm volatile ("dac 0131"); + asm volatile ("law 03000"); + asm volatile ("dac 0130"); x.field1 = 027; x.field2 = 030; @@ -26,6 +27,6 @@ void _start(void) } static void putc(int c) { - asm ("lio %0" : : "r"(c)); - asm ("tyo"); + asm volatile ("lio %0" : : "r"(c) : "$io"); + asm volatile ("tyo"); } diff --git a/c-print-x/main.c b/c-print-x/main.c index 9c430ab..35c7801 100644 --- a/c-print-x/main.c +++ b/c-print-x/main.c @@ -6,18 +6,19 @@ int y; void _start(void) { - asm ("law 04000"); - asm ("dac 209"); - asm ("dac 208"); + asm volatile ("law 04000"); + asm volatile ("dac 0131"); + asm volatile ("law 03000"); + asm volatile ("dac 0130"); - asm ("lio %0" : : "r"(x)); - asm ("tyo"); + asm volatile ("lio %0" : : "r"(x) : "$io"); + asm volatile ("tyo"); y = 027; - asm ("lio %0" : : "r"(y)); - asm ("tyo"); + asm volatile ("lio %0" : : "r"(y) : "$io"); + asm volatile ("tyo"); - asm ("hlt"); + asm volatile ("hlt"); __builtin_unreachable(); } diff --git a/c-test-arith/main.c b/c-test-arith/main.c index e7bf177..8679e16 100644 --- a/c-test-arith/main.c +++ b/c-test-arith/main.c @@ -7,10 +7,10 @@ int z; void _start(void) { /* TODO: handle sp/fp init better -- separate crt0.S? */ - asm ("law 03000"); - asm ("dac 209"); - asm ("law 04000"); - asm ("dac 208"); + asm volatile ("law 03000"); + asm volatile ("dac 0131"); + asm volatile ("law 04000"); + asm volatile ("dac 0130"); x = 21; y = 37; @@ -23,11 +23,11 @@ void _start(void) if (z == 4) putc(027); - asm ("hlt"); + asm volatile ("hlt"); __builtin_unreachable(); } static void putc(int c) { - asm ("lio %0" : : "r"(c)); - asm ("tyo"); + asm volatile ("lio %0" : : "r"(c) : "$io"); + asm volatile ("tyo"); } diff --git a/c-test-comparison/main.c b/c-test-comparison/main.c index f72170c..408c553 100644 --- a/c-test-comparison/main.c +++ b/c-test-comparison/main.c @@ -3,10 +3,10 @@ static void putc(int); void _start(void) { /* TODO: handle sp/fp init better -- separate crt0.S? */ - asm ("law 03000"); - asm ("dac 209"); - asm ("law 04000"); - asm ("dac 208"); + asm volatile ("law 03000"); + asm volatile ("dac 0131"); + asm volatile ("law 04000"); + asm volatile ("dac 0130"); int x = 30; int y = 30; @@ -44,11 +44,11 @@ void _start(void) if (x > y) putc(071); // i - asm ("hlt"); + asm volatile ("hlt"); __builtin_unreachable(); } static void putc(int c) { - asm ("lio %0" : : "r"(c)); - asm ("tyo"); + asm volatile ("lio %0" : : "r"(c) : "$io"); + asm volatile ("tyo"); } diff --git a/c-test-recursion/main.c b/c-test-recursion/main.c index 73ab9ab..35ec738 100644 --- a/c-test-recursion/main.c +++ b/c-test-recursion/main.c @@ -5,20 +5,20 @@ static void foo(int); void _start(void) { /* TODO: handle sp/fp init better -- separate crt0.S? */ - asm ("law 03000"); - asm ("dac 209"); - asm ("law 04000"); - asm ("dac 208"); + asm volatile ("law 03000"); + asm volatile ("dac 0131"); + asm volatile ("law 04000"); + asm volatile ("dac 0130"); foo(20); - asm ("hlt"); + asm volatile ("hlt"); __builtin_unreachable(); } static void putc() { - asm ("lio %0" : : "r"(027) : "io"); - asm ("tyo"); + asm volatile ("lio %0" : : "r"(027) : "$io"); + asm volatile ("tyo"); } static void foo(int n) diff --git a/pdp1-gcc b/pdp1-gcc index 2804d4a..d579a4b 160000 --- a/pdp1-gcc +++ b/pdp1-gcc @@ -1 +1 @@ -Subproject commit 2804d4aff1325f86a6967f91e9b8c9da76cea0db +Subproject commit d579a4b8a5402963989c8e97ccf61f5f5a81aa1d