From 211f7d637d03b756f91a6af42877f916bd8b6990 Mon Sep 17 00:00:00 2001 From: Tormod Volden Date: Sun, 26 Apr 2015 18:50:01 +0200 Subject: [PATCH] dragon-nx32: Optimized bank copy routine for fork Signed-off-by: Tormod Volden --- Kernel/platform-dragon-nx32/mem-nx32.s | 14 ++++++++++++++ Kernel/platform-dragon-nx32/tricks.s | 12 +++--------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/Kernel/platform-dragon-nx32/mem-nx32.s b/Kernel/platform-dragon-nx32/mem-nx32.s index 39d79552..2a1ebf58 100644 --- a/Kernel/platform-dragon-nx32/mem-nx32.s +++ b/Kernel/platform-dragon-nx32/mem-nx32.s @@ -14,6 +14,7 @@ .globl map_process_always .globl map_save .globl map_restore + .globl copybank ; imported .globl _ramsize @@ -96,6 +97,19 @@ map_restore lda map_store bra map_set_a +; optimized bank copy for fork +; src bank in A, dst bank in B, start in X, end in U +copybank + stu cmpend+1 ; self-modiying code FTW +copyf sta banksel + ldu ,x + stb banksel + stu ,x++ +cmpend cmpx #0 + blo copyf + stb map_copy + rts + map_store .db 0 map_copy .db 0 diff --git a/Kernel/platform-dragon-nx32/tricks.s b/Kernel/platform-dragon-nx32/tricks.s index d636a6cb..ef6cbd66 100644 --- a/Kernel/platform-dragon-nx32/tricks.s +++ b/Kernel/platform-dragon-nx32/tricks.s @@ -13,6 +13,7 @@ .globl map_process .globl map_process_a .globl map_process_always + .globl copybank # exported .globl _switchout @@ -207,15 +208,8 @@ fork_copy: ldb P_TAB__P_PAGE_OFFSET+1,x ; new bank lda U_DATA__U_PAGE+1 ; old bank ldx #0x8000 ; PROGBASE -copyf: - jsr map_process_a - ldu ,x - exg a,b - jsr map_process_a ; preserves A and B - stu ,x++ - exg a,b - cmpx U_DATA__U_TOP - blo copyf + ldu U_DATA__U_TOP + jsr copybank ; preserves A,B, clobbers X,U ; stash parent urea (including kernel stack) jsr map_process_a -- 2.34.1