From 2ab14db9893171876839c7ac813e8042e19bf217 Mon Sep 17 00:00:00 2001 From: jingfei Date: Thu, 17 Sep 2015 22:30:06 -0700 Subject: [PATCH 01/11] do homework #1 --- lab-1/fib.s | 21 +++++++++++---------- lab-1i/fib.s | 27 +++++++++++++-------------- lab-1i/fibseq.c | 4 ++-- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/lab-1/fib.s b/lab-1/fib.s index 14c6734..a94d856 100644 --- a/lab-1/fib.s +++ b/lab-1/fib.s @@ -13,20 +13,21 @@ fibonacci: @ PROLOG push {r3, r4, r5, lr} - @ R4 = R0 - 0 (update flags) - @ if(R0 <= 0) goto .L3 (which returns 0) + sub r4, r0, #0 @ R4 = R0 - 0 (update flags) + cmp r0, #0 @ if(R0 <= 0) goto .L3 (which returns 0) + ble .L3 - @ Compare R4 wtih 1 - @ If R4 == 1 goto .L4 (which returns 1) + cmp r0, #1 @ Compare R4 wtih 1 + beq .L4 @ If R4 == 1 goto .L4 (which returns 1) - @ R0 = R4 - 1 - @ Recursive call to fibonacci with R4 - 1 as parameter + sub r0, r4, #1 @ R0 = R4 - 1 + bl fibonacci @ Recursive call to fibonacci with R4 - 1 as parameter - @ R5 = R0 - @ R0 = R4 - 2 - @ Recursive call to fibonacci with R4 - 2 as parameter + mov r5, r0 @ R5 = R0 + sub r0, r4, #2 @ R0 = R4 - 2 + bl fibonacci @ Recursive call to fibonacci with R4 - 2 as parameter - @ R0 = R5 + R0 (update flags) + add r0, r5, r0 @ R0 = R5 + R0 (update flags) pop {r3, r4, r5, pc} @EPILOG diff --git a/lab-1i/fib.s b/lab-1i/fib.s index 14c6734..a314c1f 100644 --- a/lab-1i/fib.s +++ b/lab-1i/fib.s @@ -13,30 +13,29 @@ fibonacci: @ PROLOG push {r3, r4, r5, lr} - @ R4 = R0 - 0 (update flags) - @ if(R0 <= 0) goto .L3 (which returns 0) + sub r4, r0, #0 @ R4 = R0 - 0 (update flags) + sub r3, r1, #0 @ first + sub r5, r2, #0 @ second + cmp r0, #0 @ if(R0 <= 0) goto .L3 (which returns second) + ble .L3 - @ Compare R4 wtih 1 - @ If R4 == 1 goto .L4 (which returns 1) + cmp r4, #1 @ Compare R4 wtih 1 + beq .L4 @ If R4 == 1 goto .L4 (which returns first) - @ R0 = R4 - 1 - @ Recursive call to fibonacci with R4 - 1 as parameter - - @ R5 = R0 - @ R0 = R4 - 2 - @ Recursive call to fibonacci with R4 - 2 as parameter - - @ R0 = R5 + R0 (update flags) + sub r0, r4, #1 @ R0 = R4 - 1 + add r1, r3, r5 @ R1 = first+second + mov r2, r3 @ R2 = first + bl fibonacci @ Recursive call to fibonacci pop {r3, r4, r5, pc} @EPILOG @ END CODE MODIFICATION .L3: - mov r0, #0 @ R0 = 0 + mov r0, r5 @ R0 = second pop {r3, r4, r5, pc} @ EPILOG .L4: - mov r0, #1 @ R0 = 1 + mov r0, r3 @ R0 = first pop {r3, r4, r5, pc} @ EPILOG .size fibonacci, .-fibonacci diff --git a/lab-1i/fibseq.c b/lab-1i/fibseq.c index 90913c2..3c641b6 100644 --- a/lab-1i/fibseq.c +++ b/lab-1i/fibseq.c @@ -1,6 +1,6 @@ #include -extern int fibonacci(int x); +extern int fibonacci(int x, int y, int z); int main(int argc, char **argv) { @@ -8,7 +8,7 @@ int main(int argc, char **argv) int result=0; scanf("%d",&number); - result = fibonacci(number); + result = fibonacci(number,1,0); printf("The fibonacci sequence at %d is: %d\n", number, result); } From e6ab39e54d09b70dba339d606422f654ca7e9900 Mon Sep 17 00:00:00 2001 From: jingfei Date: Thu, 17 Sep 2015 23:06:29 -0700 Subject: [PATCH 02/11] change lab-1i to iteration's version --- lab-1/fib.s | 26 ++++++++++++-------------- lab-1/fibseq.c | 4 ++-- lab-1i/fib.s | 25 +++++++++++++++---------- lab-1i/fibseq.c | 4 ++-- 4 files changed, 31 insertions(+), 28 deletions(-) diff --git a/lab-1/fib.s b/lab-1/fib.s index a94d856..a314c1f 100644 --- a/lab-1/fib.s +++ b/lab-1/fib.s @@ -13,31 +13,29 @@ fibonacci: @ PROLOG push {r3, r4, r5, lr} - sub r4, r0, #0 @ R4 = R0 - 0 (update flags) - cmp r0, #0 @ if(R0 <= 0) goto .L3 (which returns 0) - ble .L3 + sub r4, r0, #0 @ R4 = R0 - 0 (update flags) + sub r3, r1, #0 @ first + sub r5, r2, #0 @ second + cmp r0, #0 @ if(R0 <= 0) goto .L3 (which returns second) + ble .L3 - cmp r0, #1 @ Compare R4 wtih 1 - beq .L4 @ If R4 == 1 goto .L4 (which returns 1) + cmp r4, #1 @ Compare R4 wtih 1 + beq .L4 @ If R4 == 1 goto .L4 (which returns first) sub r0, r4, #1 @ R0 = R4 - 1 - bl fibonacci @ Recursive call to fibonacci with R4 - 1 as parameter - - mov r5, r0 @ R5 = R0 - sub r0, r4, #2 @ R0 = R4 - 2 - bl fibonacci @ Recursive call to fibonacci with R4 - 2 as parameter - - add r0, r5, r0 @ R0 = R5 + R0 (update flags) + add r1, r3, r5 @ R1 = first+second + mov r2, r3 @ R2 = first + bl fibonacci @ Recursive call to fibonacci pop {r3, r4, r5, pc} @EPILOG @ END CODE MODIFICATION .L3: - mov r0, #0 @ R0 = 0 + mov r0, r5 @ R0 = second pop {r3, r4, r5, pc} @ EPILOG .L4: - mov r0, #1 @ R0 = 1 + mov r0, r3 @ R0 = first pop {r3, r4, r5, pc} @ EPILOG .size fibonacci, .-fibonacci diff --git a/lab-1/fibseq.c b/lab-1/fibseq.c index 90913c2..3c641b6 100644 --- a/lab-1/fibseq.c +++ b/lab-1/fibseq.c @@ -1,6 +1,6 @@ #include -extern int fibonacci(int x); +extern int fibonacci(int x, int y, int z); int main(int argc, char **argv) { @@ -8,7 +8,7 @@ int main(int argc, char **argv) int result=0; scanf("%d",&number); - result = fibonacci(number); + result = fibonacci(number,1,0); printf("The fibonacci sequence at %d is: %d\n", number, result); } diff --git a/lab-1i/fib.s b/lab-1i/fib.s index a314c1f..413de6f 100644 --- a/lab-1i/fib.s +++ b/lab-1i/fib.s @@ -14,28 +14,33 @@ fibonacci: push {r3, r4, r5, lr} sub r4, r0, #0 @ R4 = R0 - 0 (update flags) - sub r3, r1, #0 @ first - sub r5, r2, #0 @ second - cmp r0, #0 @ if(R0 <= 0) goto .L3 (which returns second) + cmp r0, #0 @ if(R0 <= 0) goto .L3 (which returns 0) ble .L3 cmp r4, #1 @ Compare R4 wtih 1 - beq .L4 @ If R4 == 1 goto .L4 (which returns first) - + beq .L4 @ If R4 == 1 goto .L4 (which returns 1) + + mov r3, #1 + mov r5, #1 +.L5: + mov r0, r5 + add r5, r3, r5 + mov r3, r0 sub r0, r4, #1 @ R0 = R4 - 1 - add r1, r3, r5 @ R1 = first+second - mov r2, r3 @ R2 = first - bl fibonacci @ Recursive call to fibonacci + mov r4, r0 + cmp r0, #2 + bne .L5 + mov r0, r5 pop {r3, r4, r5, pc} @EPILOG @ END CODE MODIFICATION .L3: - mov r0, r5 @ R0 = second + mov r0, #0 @ R0 = 0 pop {r3, r4, r5, pc} @ EPILOG .L4: - mov r0, r3 @ R0 = first + mov r0, #1 @ R0 = 1 pop {r3, r4, r5, pc} @ EPILOG .size fibonacci, .-fibonacci diff --git a/lab-1i/fibseq.c b/lab-1i/fibseq.c index 3c641b6..90913c2 100644 --- a/lab-1i/fibseq.c +++ b/lab-1i/fibseq.c @@ -1,6 +1,6 @@ #include -extern int fibonacci(int x, int y, int z); +extern int fibonacci(int x); int main(int argc, char **argv) { @@ -8,7 +8,7 @@ int main(int argc, char **argv) int result=0; scanf("%d",&number); - result = fibonacci(number,1,0); + result = fibonacci(number); printf("The fibonacci sequence at %d is: %d\n", number, result); } From c42dd147cf1f5bb092b5ac2cdd33ce82e15d847f Mon Sep 17 00:00:00 2001 From: jingfei Date: Fri, 18 Sep 2015 03:04:08 -0700 Subject: [PATCH 03/11] Lab-1/Lab-1i's Makefile can check the answer automatically change qemu script in Makefile... * add while loop to run from 1 to 50 * after 47, it exceeds 32-bit integer's range, overflow * add three more var for calculating the correct answer * use cut to get the program's output and compare with the correct answer * if the ans is wrong, it will output the correct answer --- lab-1/Makefile | 26 ++++++++++++++++++++------ lab-1i/Makefile | 26 ++++++++++++++++++++------ 2 files changed, 40 insertions(+), 12 deletions(-) diff --git a/lab-1/Makefile b/lab-1/Makefile index 84806d7..a9e957e 100644 --- a/lab-1/Makefile +++ b/lab-1/Makefile @@ -26,9 +26,23 @@ clean: QEMU_CMD = qemu-arm -L /usr/arm-linux-gnueabihf ./fibseq & CMD = yes 9 | $(call QEMU_CMD) && sleep 1 qemu: fibseq - @yes 5 | $(call QEMU_CMD) - @sleep 1 - @yes 6 | $(call QEMU_CMD) - @sleep 1 - @yes 7 | $(call QEMU_CMD) - @sleep 1 + @num=1 ; i1=0 ; i2=1 ; \ + while [ $$num -le 50 ] ; do \ + # save output answer \ + ans=`yes $$num | $(call QEMU_CMD)` ; \ + sleep 0.5 ; \ + # echo output \ + echo $$ans ; \ + # split output string && save answer \ + ans=`echo $$ans | cut -d ' ' -f 7` ; \ + # calculate the correct answer \ + i3=$$i2 ; i2=`expr $$i1 + $$i2` ; i1=$$i3 ; \ + # check if it is right \ + if [ "$$i1" -eq "$$ans" ] ; then \ + echo " -> correct" ; \ + else \ + echo " -> wrong, the ans is $$i1" ; \ + fi ; \ + num=`expr $$num + 1` ; \ + done + diff --git a/lab-1i/Makefile b/lab-1i/Makefile index 84806d7..a9e957e 100644 --- a/lab-1i/Makefile +++ b/lab-1i/Makefile @@ -26,9 +26,23 @@ clean: QEMU_CMD = qemu-arm -L /usr/arm-linux-gnueabihf ./fibseq & CMD = yes 9 | $(call QEMU_CMD) && sleep 1 qemu: fibseq - @yes 5 | $(call QEMU_CMD) - @sleep 1 - @yes 6 | $(call QEMU_CMD) - @sleep 1 - @yes 7 | $(call QEMU_CMD) - @sleep 1 + @num=1 ; i1=0 ; i2=1 ; \ + while [ $$num -le 50 ] ; do \ + # save output answer \ + ans=`yes $$num | $(call QEMU_CMD)` ; \ + sleep 0.5 ; \ + # echo output \ + echo $$ans ; \ + # split output string && save answer \ + ans=`echo $$ans | cut -d ' ' -f 7` ; \ + # calculate the correct answer \ + i3=$$i2 ; i2=`expr $$i1 + $$i2` ; i1=$$i3 ; \ + # check if it is right \ + if [ "$$i1" -eq "$$ans" ] ; then \ + echo " -> correct" ; \ + else \ + echo " -> wrong, the ans is $$i1" ; \ + fi ; \ + num=`expr $$num + 1` ; \ + done + From f83b8ae1bbf666214ff8310109e6f497930f0ad6 Mon Sep 17 00:00:00 2001 From: jingfei Date: Fri, 18 Sep 2015 03:12:25 -0700 Subject: [PATCH 04/11] Fix the bug with the second Fibonacci (add the exception to input "2") My loop start with 3, so there will be a bug if I didn't add exception. --- lab-1i/fib.s | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lab-1i/fib.s b/lab-1i/fib.s index 413de6f..59ec7ab 100644 --- a/lab-1i/fib.s +++ b/lab-1i/fib.s @@ -19,6 +19,9 @@ fibonacci: cmp r4, #1 @ Compare R4 wtih 1 beq .L4 @ If R4 == 1 goto .L4 (which returns 1) + + cmp r4, #2 + beq .L4 mov r3, #1 mov r5, #1 From cc149daad11931905a539c882f841fd42d0e3100 Mon Sep 17 00:00:00 2001 From: jingfei Date: Fri, 18 Sep 2015 04:44:11 -0700 Subject: [PATCH 05/11] Move the same Makefiles to their parent directory Move lab-1, lab-1i's Makefile to ../make_fib.mk And include the file --- lab-1/Makefile | 49 +------------------------------------------------ lab-1i/Makefile | 49 +------------------------------------------------ make_fib.mk | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 96 deletions(-) create mode 100644 make_fib.mk diff --git a/lab-1/Makefile b/lab-1/Makefile index a9e957e..45ded60 100644 --- a/lab-1/Makefile +++ b/lab-1/Makefile @@ -1,48 +1 @@ -CC = arm-linux-gnueabihf-gcc -CFLAGS = -O1 -Wall -LDFLAGS = -fno-stack-protector - -objects = fibseq.o fib.o - -default: fibseq - -.PHONY: default clean qemu - -fibseq: $(objects) - $(CC) $(LDFLAGS) -o $@ $^ - -fib.o: fib.s -fibseq.o: fibseq.c - -%.o: %.c - $(CC) -c $(CFLAGS) -o $@ $< - -%.o: %.s - $(CC) -c $(CFLAGS) -o $@ $< - -clean: - rm -f $(objects) fibseq - -QEMU_CMD = qemu-arm -L /usr/arm-linux-gnueabihf ./fibseq & -CMD = yes 9 | $(call QEMU_CMD) && sleep 1 -qemu: fibseq - @num=1 ; i1=0 ; i2=1 ; \ - while [ $$num -le 50 ] ; do \ - # save output answer \ - ans=`yes $$num | $(call QEMU_CMD)` ; \ - sleep 0.5 ; \ - # echo output \ - echo $$ans ; \ - # split output string && save answer \ - ans=`echo $$ans | cut -d ' ' -f 7` ; \ - # calculate the correct answer \ - i3=$$i2 ; i2=`expr $$i1 + $$i2` ; i1=$$i3 ; \ - # check if it is right \ - if [ "$$i1" -eq "$$ans" ] ; then \ - echo " -> correct" ; \ - else \ - echo " -> wrong, the ans is $$i1" ; \ - fi ; \ - num=`expr $$num + 1` ; \ - done - +include ../make_fib.mk diff --git a/lab-1i/Makefile b/lab-1i/Makefile index a9e957e..45ded60 100644 --- a/lab-1i/Makefile +++ b/lab-1i/Makefile @@ -1,48 +1 @@ -CC = arm-linux-gnueabihf-gcc -CFLAGS = -O1 -Wall -LDFLAGS = -fno-stack-protector - -objects = fibseq.o fib.o - -default: fibseq - -.PHONY: default clean qemu - -fibseq: $(objects) - $(CC) $(LDFLAGS) -o $@ $^ - -fib.o: fib.s -fibseq.o: fibseq.c - -%.o: %.c - $(CC) -c $(CFLAGS) -o $@ $< - -%.o: %.s - $(CC) -c $(CFLAGS) -o $@ $< - -clean: - rm -f $(objects) fibseq - -QEMU_CMD = qemu-arm -L /usr/arm-linux-gnueabihf ./fibseq & -CMD = yes 9 | $(call QEMU_CMD) && sleep 1 -qemu: fibseq - @num=1 ; i1=0 ; i2=1 ; \ - while [ $$num -le 50 ] ; do \ - # save output answer \ - ans=`yes $$num | $(call QEMU_CMD)` ; \ - sleep 0.5 ; \ - # echo output \ - echo $$ans ; \ - # split output string && save answer \ - ans=`echo $$ans | cut -d ' ' -f 7` ; \ - # calculate the correct answer \ - i3=$$i2 ; i2=`expr $$i1 + $$i2` ; i1=$$i3 ; \ - # check if it is right \ - if [ "$$i1" -eq "$$ans" ] ; then \ - echo " -> correct" ; \ - else \ - echo " -> wrong, the ans is $$i1" ; \ - fi ; \ - num=`expr $$num + 1` ; \ - done - +include ../make_fib.mk diff --git a/make_fib.mk b/make_fib.mk new file mode 100644 index 0000000..a9e957e --- /dev/null +++ b/make_fib.mk @@ -0,0 +1,48 @@ +CC = arm-linux-gnueabihf-gcc +CFLAGS = -O1 -Wall +LDFLAGS = -fno-stack-protector + +objects = fibseq.o fib.o + +default: fibseq + +.PHONY: default clean qemu + +fibseq: $(objects) + $(CC) $(LDFLAGS) -o $@ $^ + +fib.o: fib.s +fibseq.o: fibseq.c + +%.o: %.c + $(CC) -c $(CFLAGS) -o $@ $< + +%.o: %.s + $(CC) -c $(CFLAGS) -o $@ $< + +clean: + rm -f $(objects) fibseq + +QEMU_CMD = qemu-arm -L /usr/arm-linux-gnueabihf ./fibseq & +CMD = yes 9 | $(call QEMU_CMD) && sleep 1 +qemu: fibseq + @num=1 ; i1=0 ; i2=1 ; \ + while [ $$num -le 50 ] ; do \ + # save output answer \ + ans=`yes $$num | $(call QEMU_CMD)` ; \ + sleep 0.5 ; \ + # echo output \ + echo $$ans ; \ + # split output string && save answer \ + ans=`echo $$ans | cut -d ' ' -f 7` ; \ + # calculate the correct answer \ + i3=$$i2 ; i2=`expr $$i1 + $$i2` ; i1=$$i3 ; \ + # check if it is right \ + if [ "$$i1" -eq "$$ans" ] ; then \ + echo " -> correct" ; \ + else \ + echo " -> wrong, the ans is $$i1" ; \ + fi ; \ + num=`expr $$num + 1` ; \ + done + From 679183ae4e592fe4b206b83037febea73eac5cd7 Mon Sep 17 00:00:00 2001 From: jingfei Date: Fri, 18 Sep 2015 04:48:24 -0700 Subject: [PATCH 06/11] Add comment for function's argument --- lab-1/fibseq.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lab-1/fibseq.c b/lab-1/fibseq.c index 3c641b6..a649e66 100644 --- a/lab-1/fibseq.c +++ b/lab-1/fibseq.c @@ -1,3 +1,10 @@ +/* * The fibonacci function call here, + * there are three arguments: fibonacci(int x, int y, int z) + * x: request for the xth Fibonacci number + * y: the last Fibonacci number we've known (fib 1 = 1) + * z: the second last Fibonacci number (fib0 = 0) + */ + #include extern int fibonacci(int x, int y, int z); From a961c8c8897ea643191f0c6f07b8c52d4980bb83 Mon Sep 17 00:00:00 2001 From: jingfei Date: Tue, 22 Sep 2015 15:32:36 -0700 Subject: [PATCH 07/11] Enhance arm code for lab-1 & lab-1i, add c code for testing reduce registers and instruction sets --- lab-1/fib.s | 29 +++++++++++------------------ lab-1/fib_c.c | 10 ++++++++++ lab-1i/fib.s | 32 +++++++------------------------- lab-1i/fib_c.c | 8 ++++++++ 4 files changed, 36 insertions(+), 43 deletions(-) create mode 100644 lab-1/fib_c.c create mode 100644 lab-1i/fib_c.c diff --git a/lab-1/fib.s b/lab-1/fib.s index a314c1f..6d728ef 100644 --- a/lab-1/fib.s +++ b/lab-1/fib.s @@ -11,32 +11,25 @@ fibonacci: @ ADD/MODIFY CODE BELOW @ PROLOG - push {r3, r4, r5, lr} + push {r3, r4, lr} - sub r4, r0, #0 @ R4 = R0 - 0 (update flags) - sub r3, r1, #0 @ first - sub r5, r2, #0 @ second - cmp r0, #0 @ if(R0 <= 0) goto .L3 (which returns second) - ble .L3 + subs r4, r0, #0 @ R4 = R0 - 0 (update flags) + beq .L4 @ If R4 == 0 goto .L4 (which returns second) - cmp r4, #1 @ Compare R4 wtih 1 - beq .L4 @ If R4 == 1 goto .L4 (which returns first) + sub r3, r1, #0 @ R3 = first - sub r0, r4, #1 @ R0 = R4 - 1 - add r1, r3, r5 @ R1 = first+second - mov r2, r3 @ R2 = first - bl fibonacci @ Recursive call to fibonacci + sub r0, r4, #1 @ R0 = R4 - 1 + add r1, r3, r2 @ R1 = first+second + mov r2, r3 @ R2 = first + bl fibonacci @ Recursive call to fibonacci - pop {r3, r4, r5, pc} @EPILOG + pop {r3, r4, pc} @EPILOG @ END CODE MODIFICATION -.L3: - mov r0, r5 @ R0 = second - pop {r3, r4, r5, pc} @ EPILOG .L4: - mov r0, r3 @ R0 = first - pop {r3, r4, r5, pc} @ EPILOG + sub r0, r2, #0 @ R0 = second + pop {r3, r4, pc} @ EPILOG .size fibonacci, .-fibonacci .end diff --git a/lab-1/fib_c.c b/lab-1/fib_c.c new file mode 100644 index 0000000..858c2c2 --- /dev/null +++ b/lab-1/fib_c.c @@ -0,0 +1,10 @@ +#include + +int fib(int n,int a,int b){ return n==0 ? b : fib(n-1,a+b,a); } + +int main(void){ + int n; + scanf("%d",&n); + printf("%d\n",fib(n,1,0)); +} + diff --git a/lab-1i/fib.s b/lab-1i/fib.s index 59ec7ab..82b865b 100644 --- a/lab-1i/fib.s +++ b/lab-1i/fib.s @@ -13,38 +13,20 @@ fibonacci: @ PROLOG push {r3, r4, r5, lr} - sub r4, r0, #0 @ R4 = R0 - 0 (update flags) - cmp r0, #0 @ if(R0 <= 0) goto .L3 (which returns 0) - ble .L3 + sub r4, r0, #0 @ R4 = R0 - 0 (update flags) - cmp r4, #1 @ Compare R4 wtih 1 - beq .L4 @ If R4 == 1 goto .L4 (which returns 1) - - cmp r4, #2 - beq .L4 - - mov r3, #1 - mov r5, #1 + mov r3, #0 @ init fib(0) = 0 + mov r5, #1 @ init fib(1) = 1 .L5: - mov r0, r5 - add r5, r3, r5 - mov r3, r0 - sub r0, r4, #1 @ R0 = R4 - 1 - mov r4, r0 - cmp r0, #2 + mov r0, r5 @ R0 = R5 and also the result + add r5, r3, r5 @ R5 += R3 + mov r3, r0 @ R3 = R0 (exchange R5, R3) + subs r4, r4, #1 @ R4 = R4 - 1 bne .L5 - mov r0, r5 pop {r3, r4, r5, pc} @EPILOG @ END CODE MODIFICATION -.L3: - mov r0, #0 @ R0 = 0 - pop {r3, r4, r5, pc} @ EPILOG - -.L4: - mov r0, #1 @ R0 = 1 - pop {r3, r4, r5, pc} @ EPILOG .size fibonacci, .-fibonacci .end diff --git a/lab-1i/fib_c.c b/lab-1i/fib_c.c new file mode 100644 index 0000000..d8caa95 --- /dev/null +++ b/lab-1i/fib_c.c @@ -0,0 +1,8 @@ +#include + +int main(void){ + int i1=0, i2=1, n, res; + scanf("%d",&n); + for(;n;--n){ res=i2; i2+=i1; i1=res; } + printf("%d\n",res); +} From ba5d66355298158ab44a3266819d27df6b576997 Mon Sep 17 00:00:00 2001 From: jingfei Date: Tue, 22 Sep 2015 17:12:10 -0700 Subject: [PATCH 08/11] Change subroutine's pushed registers, according to AAPCS Core registers and AAPCS usage * R0 ~ R3: Arguments * R4 ~ R8, R10, R11: Variable register * R9: Platform register * R12: IP (The Intra-Procedure-call scratch register) * R13: SP (The Stack Pointer) * R14: LR (The Link Register) * R15: PC (The Program Counter) --- lab-1/fib.s | 12 ++++++------ lab-1i/fib.s | 18 +++++++++--------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/lab-1/fib.s b/lab-1/fib.s index 6d728ef..e1b6b45 100644 --- a/lab-1/fib.s +++ b/lab-1/fib.s @@ -11,25 +11,25 @@ fibonacci: @ ADD/MODIFY CODE BELOW @ PROLOG - push {r3, r4, lr} + push {r4, r5, lr} subs r4, r0, #0 @ R4 = R0 - 0 (update flags) beq .L4 @ If R4 == 0 goto .L4 (which returns second) - sub r3, r1, #0 @ R3 = first + sub r5, r1, #0 @ R5 = first sub r0, r4, #1 @ R0 = R4 - 1 - add r1, r3, r2 @ R1 = first+second - mov r2, r3 @ R2 = first + add r1, r5, r2 @ R1 = first+second + mov r2, r5 @ R2 = first bl fibonacci @ Recursive call to fibonacci - pop {r3, r4, pc} @EPILOG + pop {r4, r5, pc} @EPILOG @ END CODE MODIFICATION .L4: sub r0, r2, #0 @ R0 = second - pop {r3, r4, pc} @ EPILOG + pop {r4, r5, pc} @ EPILOG .size fibonacci, .-fibonacci .end diff --git a/lab-1i/fib.s b/lab-1i/fib.s index 82b865b..d4f18ec 100644 --- a/lab-1i/fib.s +++ b/lab-1i/fib.s @@ -11,20 +11,20 @@ fibonacci: @ ADD/MODIFY CODE BELOW @ PROLOG - push {r3, r4, r5, lr} + push {r4, r5, r6, lr} sub r4, r0, #0 @ R4 = R0 - 0 (update flags) - mov r3, #0 @ init fib(0) = 0 - mov r5, #1 @ init fib(1) = 1 -.L5: - mov r0, r5 @ R0 = R5 and also the result - add r5, r3, r5 @ R5 += R3 - mov r3, r0 @ R3 = R0 (exchange R5, R3) + mov r5, #0 @ init fib(0) = 0 + mov r6, #1 @ init fib(1) = 1 +.Loop: + mov r0, r6 @ R0 = R6 and also the result + add r6, r5, r6 @ R6 += R5 + mov r5, r0 @ R5 = R0 (exchange R5, R6) subs r4, r4, #1 @ R4 = R4 - 1 - bne .L5 + bne .Loop - pop {r3, r4, r5, pc} @EPILOG + pop {r4, r5, r6, pc} @EPILOG @ END CODE MODIFICATION From 46a966f2aa34fc340350f5c028cfdea2d4d1006f Mon Sep 17 00:00:00 2001 From: jingfei Date: Fri, 25 Sep 2015 02:17:53 -0700 Subject: [PATCH 09/11] Move lab-1 C code to directory "lab-1-c". Use gprof and gnuplot to analysis. 1. use `make qemu` to analysis, the output is 'analysis.txt' 2. after arrange the analysis file use gnuplot to generate the chart (the command is in 'gplot_cmd.txt' file) --- lab-1-c/Makefile | 19 ++++++++ lab-1-c/efficiency.png | Bin 0 -> 7347 bytes lab-1-c/fib.c | 22 +++++++++ lab-1i/fib_c.c => lab-1-c/fib_iterative.c | 0 lab-1-c/fib_recursive.c | 9 ++++ lab-1/fib_c.c => lab-1-c/fib_tail_recursive.c | 6 ++- lab-1-c/gplot_cmd.txt | 11 +++++ lab-1-c/result.txt | 46 ++++++++++++++++++ 8 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 lab-1-c/Makefile create mode 100644 lab-1-c/efficiency.png create mode 100644 lab-1-c/fib.c rename lab-1i/fib_c.c => lab-1-c/fib_iterative.c (100%) create mode 100644 lab-1-c/fib_recursive.c rename lab-1/fib_c.c => lab-1-c/fib_tail_recursive.c (55%) create mode 100644 lab-1-c/gplot_cmd.txt create mode 100644 lab-1-c/result.txt diff --git a/lab-1-c/Makefile b/lab-1-c/Makefile new file mode 100644 index 0000000..b04846a --- /dev/null +++ b/lab-1-c/Makefile @@ -0,0 +1,19 @@ + +default: fib + +fib: fib.o + gcc -Wall -pg fib.c -o fib + +fib.o: fib.c + +qemu: fib + @num=1 ; while [ $$num -le 10 ] ; do \ + echo "go to $$num" ; \ + echo "\ngo to $$num \n" >> analysis.txt ; \ + ./fib $$num ; \ + gprof fib gmon.out -p -b >> analysis.txt ; \ + num=`expr $$num + 1` ; \ + done + +clean: + rm fib fib.o gmon.out analysis.txt diff --git a/lab-1-c/efficiency.png b/lab-1-c/efficiency.png new file mode 100644 index 0000000000000000000000000000000000000000..5faded100a9e677a829ef365f35c6d844598c0d3 GIT binary patch literal 7347 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 literal 0 HcmV?d00001 diff --git a/lab-1-c/fib.c b/lab-1-c/fib.c new file mode 100644 index 0000000..c5613b0 --- /dev/null +++ b/lab-1-c/fib.c @@ -0,0 +1,22 @@ +#include +#define TIMES 1000000 + +int recursive(int n){ return n<3 ? 1 : recursive(n-1)+recursive(n-2); } + +int tail_rec(int n,int a,int b){ return n==0 ? b : tail_rec(n-1,a+b,a); } + +int iterative(int n){ + int i1=0, i2=1, res; + for(;n;--n){ res=i2; i2+=i1; i1=res; } + return res; +} + +int main(int argc, char* argv[]){ + int n=atoi(argv[1]),i; + for(i=0;i + +int fib(int n){ return n<3 ? 1 : fib(n-1)+fib(n-2); } + +int main(void){ + int n; + scanf("%d",&n); + printf("%d\n",fib(n)); +} diff --git a/lab-1/fib_c.c b/lab-1-c/fib_tail_recursive.c similarity index 55% rename from lab-1/fib_c.c rename to lab-1-c/fib_tail_recursive.c index 858c2c2..12eb77f 100644 --- a/lab-1/fib_c.c +++ b/lab-1-c/fib_tail_recursive.c @@ -1,10 +1,12 @@ #include +#define times 10000000 int fib(int n,int a,int b){ return n==0 ? b : fib(n-1,a+b,a); } int main(void){ - int n; + int n,i; scanf("%d",&n); - printf("%d\n",fib(n,1,0)); + for(i=0;i plot "analysis-result.txt" +> set style data lines # 設定成連線模式 +> set grid # 模擬方格紙效果 +> set title "fib efficiency" # 加上標題。 +> replot # 重畫一遍 +> plot "analysis-result.txt" using 1:2 title 'Recursion', \ + "analysis-result.txt" using 1:3 title 'Tail-Recursion', \ + "analysis-result.txt" using 1:4 title 'Iteration' # 同時畫三圖 +> set logscale y; replot # y軸差異太大, 用 logscale +> set output "efficiency.png" ; set term png ; replot diff --git a/lab-1-c/result.txt b/lab-1-c/result.txt new file mode 100644 index 0000000..9b31ce3 --- /dev/null +++ b/lab-1-c/result.txt @@ -0,0 +1,46 @@ +1 1.52 3.03 2.02 +2 3.03 1.01 6.06 +3 7.58 13.13 5.05 +4 9.09 9.09 5.05 +5 29.80 20.20 7.07 +6 50.52 16.16 6.06 +7 30.31 21.21 10.10 +8 95.98 22.22 28.28 +9 121.24 25.25 15.15 +10 298.04 29.29 44.44 +11 272.78 40.40 35.35 +12 722.37 30.30 26.26 +13 914.33 43.43 31.31 +14 1400 43.43 40.40 +15 2550 52.53 46.46 +16 3030 49.49 35.35 +17 10100 56.57 58.59 +18 9090 63.64 65.66 +19 15150 68.69 49.49 +20 23740 64.65 67.68 +21 48490 98.99 62.63 +22 60110 72.73 78.79 +23 111640 78.79 66.67 +24 183880 87.88 77.78 +25 293490 85.86 84.85 +26 606190 90.91 79.80 +27 1210000 97.98 81.82 +28 1520000 96.97 90.91 +29 2170000 124.24 84.85 +30 3740000 130.30 74.75 +31 5250000 121.21 78.79 +32 9500000 104.04 90.91 +33 13490000 146.46 94.95 +34 22530000 111.11 118.18 +35 46520000 119.19 109.09 +36 65670000 120.20 98.99 +37 70720000 151.52 101.01 +38 14144000 129.29 123.23 +39 22732000 153.54 117.17 +40 43443000 132.32 135.35 +41 67691000 161.62 122.22 +42 11200000 137.37 143.43 +43 17200000 200.00 130.30 +44 31200000 155.56 115.15 +45 46000000 157.58 128.28 +45 86600000 159.60 145.45 From ba2938b0a0b230baa30cdedf42a2c9d3002d4be9 Mon Sep 17 00:00:00 2001 From: jingfei Date: Sat, 26 Sep 2015 14:51:50 -0700 Subject: [PATCH 10/11] Correct result's data and picture by the wrong format. --- lab-1-c/efficiency.png | Bin 7347 -> 7048 bytes lab-1-c/result.txt | 92 ++++++++++++++++++++--------------------- 2 files changed, 46 insertions(+), 46 deletions(-) diff --git a/lab-1-c/efficiency.png b/lab-1-c/efficiency.png index 5faded100a9e677a829ef365f35c6d844598c0d3..0ff145171213d01324b0975ed2da3ba7dd1a2c30 100644 GIT binary patch literal 7048 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 diff --git a/lab-1-c/result.txt b/lab-1-c/result.txt index 9b31ce3..607006f 100644 --- a/lab-1-c/result.txt +++ b/lab-1-c/result.txt @@ -1,46 +1,46 @@ -1 1.52 3.03 2.02 -2 3.03 1.01 6.06 -3 7.58 13.13 5.05 -4 9.09 9.09 5.05 -5 29.80 20.20 7.07 -6 50.52 16.16 6.06 -7 30.31 21.21 10.10 -8 95.98 22.22 28.28 -9 121.24 25.25 15.15 -10 298.04 29.29 44.44 -11 272.78 40.40 35.35 -12 722.37 30.30 26.26 -13 914.33 43.43 31.31 -14 1400 43.43 40.40 -15 2550 52.53 46.46 -16 3030 49.49 35.35 -17 10100 56.57 58.59 -18 9090 63.64 65.66 -19 15150 68.69 49.49 -20 23740 64.65 67.68 -21 48490 98.99 62.63 -22 60110 72.73 78.79 -23 111640 78.79 66.67 -24 183880 87.88 77.78 -25 293490 85.86 84.85 -26 606190 90.91 79.80 -27 1210000 97.98 81.82 -28 1520000 96.97 90.91 -29 2170000 124.24 84.85 -30 3740000 130.30 74.75 -31 5250000 121.21 78.79 -32 9500000 104.04 90.91 -33 13490000 146.46 94.95 -34 22530000 111.11 118.18 -35 46520000 119.19 109.09 -36 65670000 120.20 98.99 -37 70720000 151.52 101.01 -38 14144000 129.29 123.23 -39 22732000 153.54 117.17 -40 43443000 132.32 135.35 -41 67691000 161.62 122.22 -42 11200000 137.37 143.43 -43 17200000 200.00 130.30 -44 31200000 155.56 115.15 -45 46000000 157.58 128.28 -45 86600000 159.60 145.45 +1 1.52 3.03 2.02 +2 3.03 1.01 6.06 +3 7.58 13.13 5.05 +4 9.09 9.09 5.05 +5 29.80 20.20 7.07 +6 50.52 16.16 6.06 +7 30.31 21.21 10.10 +8 95.98 22.22 28.28 +9 121.24 25.25 15.15 +10 298.04 29.29 44.44 +11 272.78 40.40 35.35 +12 722.37 30.30 26.26 +13 914.33 43.43 31.31 +14 1400 43.43 40.40 +15 2550 52.53 46.46 +16 3030 49.49 35.35 +17 10100 56.57 58.59 +18 9090 63.64 65.66 +19 15150 68.69 49.49 +20 23740 64.65 67.68 +21 48490 98.99 62.63 +22 60110 72.73 78.79 +23 111640 78.79 66.67 +24 183880 87.88 77.78 +25 293490 85.86 84.85 +26 606190 90.91 79.80 +27 1210000 97.98 81.82 +28 1520000 96.97 90.91 +29 2170000 124.24 84.85 +30 3740000 130.30 74.75 +31 5250000 121.21 78.79 +32 9500000 104.04 90.91 +33 13490000 146.46 94.95 +34 22530000 111.11 118.18 +35 46520000 119.19 109.09 +36 65670000 120.20 98.99 +37 70720000 151.52 101.01 +38 141440000 129.29 123.23 +39 227320000 153.54 117.17 +40 434430000 132.32 135.35 +41 676910000 161.62 122.22 +42 1120000000 137.37 143.43 +43 1720000000 200.00 130.30 +44 3120000000 155.56 115.15 +45 4600000000 157.58 128.28 +45 8660000000 159.60 145.45 From fefda94e16bd51dbeef74b0ec3d3742fe34b4112 Mon Sep 17 00:00:00 2001 From: JingFei Date: Wed, 14 Oct 2015 01:50:04 -0700 Subject: [PATCH 11/11] Create README.md --- README.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..8c3052c --- /dev/null +++ b/README.md @@ -0,0 +1,20 @@ +# lab-1 +Here are three different version... + +1. [recursion](lab-1/): Use `make` command to check the answer +2. [iteration](lab-1i/): Use `make` command to check the answer +3. [c-code](lab-1-c/): Translate arm code to c, and use `gprof` to analyze. You can use `make` to run the `gprof` script, the results will show in `analysis.txt`. After arranging the data, you can see the example in [result.txt](lab-1-c/result.txt). Finally, I use the [script](lab-1-c/gplot_cmd.txt) and the [result](lab-1-c/efficiency.png) shows as following... +```sh +gnuplot +> plot "analysis-result.txt" +> set style data lines # connect each dots +> set grid # set background as grid +> set title "fib efficiency" # add title +> replot +> plot "analysis-result.txt" using 1:2 title 'Recursion', \ + "analysis-result.txt" using 1:3 title 'Tail-Recursion', \ + "analysis-result.txt" using 1:4 title 'Iteration' # plot three data at the same time +> set logscale y; replot # data in y-axis is large, use logscale +> set output "efficiency.png" ; set term png ; replot +``` +![picture alt](lab-1-c/efficiency.png)