From 8392e7118f4683f97b9e249953e71e9332fb8b53 Mon Sep 17 00:00:00 2001 From: Date Date: Thu, 31 Jul 2014 21:03:12 +0800 Subject: [PATCH 1/2] finish fibseq --- lab-1/fib.s | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/lab-1/fib.s b/lab-1/fib.s index 14c6734..1abbf02 100644 --- a/lab-1/fib.s +++ b/lab-1/fib.s @@ -15,19 +15,23 @@ fibonacci: @ R4 = R0 - 0 (update flags) @ if(R0 <= 0) goto .L3 (which returns 0) - + subs r4, r0, #0 + ble .L3 @ Compare R4 wtih 1 @ If R4 == 1 goto .L4 (which returns 1) - + subs r0, r4, #1 + beq .L4 @ R0 = R4 - 1 @ Recursive call to fibonacci with R4 - 1 as parameter - + bl fibonacci @ R5 = R0 @ R0 = R4 - 2 @ Recursive call to fibonacci with R4 - 2 as parameter - + mov r5, r0 + sub r0, r4, #2 + bl fibonacci @ R0 = R5 + R0 (update flags) - + adds r0, r0, r5 pop {r3, r4, r5, pc} @EPILOG @ END CODE MODIFICATION From 707c2d8b3acfb5cf959a325134bddd07842c9e1d Mon Sep 17 00:00:00 2001 From: Date Date: Fri, 1 Aug 2014 21:25:00 +0800 Subject: [PATCH 2/2] finish mutex impl --- lab-2/mutex.s | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/lab-2/mutex.s b/lab-2/mutex.s index d23565d..aa2d346 100644 --- a/lab-2/mutex.s +++ b/lab-2/mutex.s @@ -8,10 +8,21 @@ .global lock_mutex .type lock_mutex, function lock_mutex: - @ INSERT CODE BELOW - - @ END CODE INSERT + @ INSERT CODE BELOW + ldr r1, =locked +.L1: + ldrex r2, [r0] + cmp r2, #0 + bne .L2 + strex r2, r1, [r0] + cmp r2, #0 + beq .L1 + dmb bx lr +.L2: + wfe + b .L1 + @ END CODE INSERT .size lock_mutex, .-lock_mutex @@ -19,8 +30,12 @@ lock_mutex: .type unlock_mutex, function unlock_mutex: @ INSERT CODE BELOW - - @ END CODE INSERT + ldr r1, =unlocked + dmb + str r1, [r0] + dsb + sev + @ END CODE INSERT bx lr .size unlock_mutex, .-unlock_mutex