diff --git a/hello_world/console.c b/hello_world/console.c index f8e5441..8dca8cb 100644 --- a/hello_world/console.c +++ b/hello_world/console.c @@ -25,23 +25,16 @@ static uint64_t potato_uart_base; static uint64_t potato_uart_reg_read(int offset) { - uint64_t addr; uint64_t val; - addr = potato_uart_base + offset; - - val = *(volatile uint64_t *)addr; + __asm__ volatile("ldcix %0,%1,%2" : "=r" (val) : "b" (potato_uart_base), "r" (offset)); return val; } static void potato_uart_reg_write(int offset, uint64_t val) { - uint64_t addr; - - addr = potato_uart_base + offset; - - *(volatile uint64_t *)addr = val; + __asm__ volatile("stdcix %0,%1,%2" : : "r" (val), "b" (potato_uart_base), "r" (offset)); } static int potato_uart_rx_empty(void) diff --git a/hello_world/hello_world.bin b/hello_world/hello_world.bin index 0be5283..73bc181 100755 Binary files a/hello_world/hello_world.bin and b/hello_world/hello_world.bin differ diff --git a/hello_world/hello_world.elf b/hello_world/hello_world.elf index 452bf29..02a362d 100755 Binary files a/hello_world/hello_world.elf and b/hello_world/hello_world.elf differ diff --git a/hello_world/hello_world.hex b/hello_world/hello_world.hex index aa27a6b..633e218 100644 --- a/hello_world/hello_world.hex +++ b/hello_world/hello_world.hex @@ -40,7 +40,7 @@ a64b5a7d14004a39 60211f0064210000 618c00003d800000 658c0000798c07c6 -7d8903a6618c113c +7d8903a6618c1014 480000004e800421 0000000000000000 0000000000000000 @@ -513,74 +513,55 @@ a64b5a7d14004a39 e8010010ebc1fff0 7c0803a6ebe1fff8 3c4000014e800020 +7c0802a63842a000 +3fe2fffffbe1fff8 +f80100103bff71a8 +48000051f821ffd1 +7fe3fb7860000000 +6000000048000139 +7fe3fb787c641b78 +60000000480000e1 +6000000048000065 +480000955463063e +4bffffec60000000 +0100000000000000 +3c40000100000180 3d20c0003842a000 6129200060000000 -f922800079290020 -3940001a3d20c000 -7929002061292018 -4e800020f9490000 +7929002039000018 +3940001af9228000 +4e8000207d4947ea 0000000000000000 3c40000100000000 600000003842a000 -390a0010e9428000 -71290001e9280000 -e86a00084082fff8 -4e8000205463063e +39000010e9228000 +794707e17d4946ea +386000084082fff8 +5463063e7c691eea +000000004e800020 0000000000000000 -3c40000100000000 -600000003842a000 -390a0010e9428000 -71290008e9280000 -f86a00004082fff8 +3842a0003c400001 +e942800060000000 +7d2a46ea39000010 +4082fff87927efe3 +7c6a4fea39200000 000000004e800020 0000000000000000 3842a0003c400001 fbc1fff07c0802a6 -7fc32214fbe1fff8 -f80100107c7f1b78 -7fbff040f821ffd1 -38210030409e000c -887f00004bffff10 -4bffff993bff0001 -000000004bffffe4 +3884fffffbe1fff8 +7fe322143bc3ffff +f821ffd1f8010010 +419e00107fbef840 +4bffff9d8c7e0001 +382100304bfffff0 +000000004bfffe98 0000028001000000 7d4348ae39200000 -409e000c2f8a0000 +419e000c2f8a0000 +4bfffff039290001 4e8000207d234b78 -4bffffe839290001 0000000000000000 -3c40000100000000 -7c0802a63842a000 -3fe2fffffbe1fff8 -f80100103bff7190 -4bfffec1f821ffd1 -4bffffad7fe3fb78 -7fe3fb787c641b78 -4bfffee94bffff59 -4bffff195463063e -000000004bfffff4 -0000018001000000 +0000000000000000 6f57206f6c6c6548 0000000a0d646c72 -0000000000000010 -0141780400527a01 -0000001000010c1b -fffffe5800000018 -0000000000000040 -0000002c00000010 -00000038fffffe84 -0000001000000000 -fffffea800000040 -0000000000000034 -0000005400000028 -00000050fffffec8 -9f029e0041094500 -437e4111300e4401 -4106dedf41000e0a -000000100000000b -fffffeec00000080 -000000000000002c -000000940000001c -00000054ffffff04 -44019f0041094400 -0000007e4111300e