From dc03ea0987a0b28eb1be8110ea6864f0d5c30d74 Mon Sep 17 00:00:00 2001 From: josh Date: Sat, 30 May 2009 14:39:05 +0000 Subject: [PATCH] added cs672 ILP lab files git-svn-id: svn://anubis/gvsu@415 45c1a28c-8058-47b2-ae61-ca45b979098e --- cs672/ILP-1.s | 16 ++++++++++++++++ cs672/ILP-11.s | 17 +++++++++++++++++ cs672/ILP-6.s | 12 ++++++++++++ cs672/ILP-9.s | 22 ++++++++++++++++++++++ cs672/ilp.odt | Bin 0 -> 21063 bytes cs672/lab2-13.s | 17 +++++++++++++++++ 6 files changed, 84 insertions(+) create mode 100644 cs672/ILP-1.s create mode 100644 cs672/ILP-11.s create mode 100644 cs672/ILP-6.s create mode 100644 cs672/ILP-9.s create mode 100644 cs672/ilp.odt create mode 100644 cs672/lab2-13.s diff --git a/cs672/ILP-1.s b/cs672/ILP-1.s new file mode 100644 index 0000000..e40e6c7 --- /dev/null +++ b/cs672/ILP-1.s @@ -0,0 +1,16 @@ + lw r2, 4(r1) ; load item1 + lw r3, 8(r1) ; load item2 + lw r4, 16(r1) ; load item3 + add r6, r2, r3 ; item1 + item2 + lw r5, 20(r1) ; load item4 + sw 0(r1), r6 ; sum1 = item1 + item2 + add r7, r4, r5 ; item3 + item4 + sw 12(r1), r7 ; sum2 = item3 + item4 + + add r8, r6, r7 ; sum1 + sum2 + sw 24(r1), r8 ; total = sum1 + sum2 + + nop + nop + nop + nop diff --git a/cs672/ILP-11.s b/cs672/ILP-11.s new file mode 100644 index 0000000..cff3530 --- /dev/null +++ b/cs672/ILP-11.s @@ -0,0 +1,17 @@ + ld f0, 32(r1) ; get value from M into f0 + ld f4, 24(r1) ; get value from M into f4 + ld f6, 16(r1) ; get value from M into f6 + ld f8, 8(r1) ; get value from M into f8 + addd f0, f0, f2 ; add to scalar in f2, result into f0 + addd f4, f4, f2 ; add to scalar in f2, result into f4 + addd f6, f6, f2 ; add to scalar in f2, result into f6 + addd f8, f8, f2 ; add to scalar in f2, result into f8 + sd 32(r1), f0 ; store result back into M + sd 24(r1), f4 ; store result back into M + sd 16(r1), f6 ; store result back into M + sd 8(r1), f8 ; store result back into M + nop + nop + nop + nop + trap #0 diff --git a/cs672/ILP-6.s b/cs672/ILP-6.s new file mode 100644 index 0000000..74a803b --- /dev/null +++ b/cs672/ILP-6.s @@ -0,0 +1,12 @@ + addi r1, r0, #32 ; initialize loop counter +Loop: + ld f0, 0(r1) ; get value from M into f0 + subi r1, r1, #8 ; decrement array pointer + addd f4, f0, f2 ; add to scalar in f2, result into f4 + bnez r1, Loop ; branch if not done + sd 8(r1), f4 ; store result back into M + nop + nop + nop + nop + trap #0 diff --git a/cs672/ILP-9.s b/cs672/ILP-9.s new file mode 100644 index 0000000..ce49b3e --- /dev/null +++ b/cs672/ILP-9.s @@ -0,0 +1,22 @@ + addi r1, r0, #32 ; initialize loop counter + ld f0, 0(r1) ; get value from M into f0 + addd f4, f0, f2 ; add to scalar in f2, result into f4 + sd 0(r1), f4 ; store result back into M + subi r1, r1, #8 ; decrement array pointer + ld f0, 0(r1) ; get value from M into f0 + addd f4, f0, f2 ; add to scalar in f2, result into f4 + sd 0(r1), f4 ; store result back into M + subi r1, r1, #8 ; decrement array pointer + ld f0, 0(r1) ; get value from M into f0 + addd f4, f0, f2 ; add to scalar in f2, result into f4 + sd 0(r1), f4 ; store result back into M + subi r1, r1, #8 ; decrement array pointer + ld f0, 0(r1) ; get value from M into f0 + addd f4, f0, f2 ; add to scalar in f2, result into f4 + sd 0(r1), f4 ; store result back into M + subi r1, r1, #8 ; decrement array pointer + nop + nop + nop + nop + trap #0 diff --git a/cs672/ilp.odt b/cs672/ilp.odt new file mode 100644 index 0000000000000000000000000000000000000000..b17b223b29d1ce9552bc3366cbae257afc2d7abc GIT binary patch literal 21063 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