Added runtime (kernel 2.0)

This commit is contained in:
felsabbagh3
2019-10-30 23:40:01 -04:00
parent 06e5f6df1d
commit 46b09028d0
37 changed files with 569 additions and 3866 deletions

24
runtime/Makefile Normal file
View File

@@ -0,0 +1,24 @@
COMP = /opt/riscv/bin/riscv32-unknown-elf-gcc
CC_FLAGS = -march=rv32im -mabi=ilp32 -O0 -Wl,-Bstatic,-T,linker.ld -ffreestanding -nostdlib
DMP = /opt/riscv/bin/riscv32-unknown-elf-objdump
CPY = /opt/riscv/bin/riscv32-unknown-elf-objcopy
VX_STR = ./startup/vx_start.s
VX_INT = ./intrinsics/vx_intrinsics.s
VX_IO = ./io/vx_io.s ./io/vx_io.c
VX_MAIN = ./vx_main.c
all: HEX DUMP ELF
DUMP: ELF
$(DMP) -D vortex_runtime.elf > vortex_runtime.dump
HEX: ELF
$(CPY) -O ihex vortex_runtime.elf vortex_runtime.hex
ELF:
$(COMP) $(CC_FLAGS) $(VX_STR) $(VX_INT) $(VX_IO) $(VX_MAIN) -o vortex_runtime.elf

View File

@@ -0,0 +1,24 @@
// Spawns Warps
void vx_wspawn (unsigned numWarps, unsigned PC_spawn);
// Changes thread mask (activated/deactivates threads)
void vx_tmc (unsigned numThreads);
// Warp Barrier
void vx_barrier(unsigned barriedID, unsigned numWarps);
// split on a predicate
void vx_split (unsigned predicate);
// Join
void vx_join (void);
// Get Hardware thread ID
unsigned vx_threadID(void);
// Get hardware warp ID
unsigned vx_warpID(void);

View File

@@ -0,0 +1,50 @@
.section .text
.type vx_wsapwn, @function
.global vx_wsapwn
vx_wsapwn:
.word 0x00b5106b # wspawn a0(numWarps), a1(PC SPAWN)
ret
.type vx_tmc, @function
.global vx_tmc
vx_tmc:
.word 0x0005006b # tmc a0
ret
.type vx_barrier, @function
.global vx_barrier
vx_barrier:
.word 0x00b5406b # barrier a0(barrier id), a1(numWarps)
ret
.type vx_split, @function
.global vx_split
vx_split:
.word 0x0005206b # split a0
.type vx_join, @function
.global vx_join
vx_join:
.word 0x0000306b #join
ret
.type vx_warpID, @function
.global vx_warpID
vx_warpID:
csrr a0, 0x21 # read warp IDs
ret
.type vx_threadID, @function
.global vx_threadID
vx_threadID:
csrr a0, 0x20 # read thread IDs
ret

30
runtime/io/vx_io.c Normal file
View File

@@ -0,0 +1,30 @@
#include "vx_io.h"
void vx_print_hex(unsigned f)
{
vx_print_str(hextoa[f]);
// if (f < 16)
// {
// vx_print_str(hextoa[f]);
// return;
// }
// int temp;
// int sf = 32;
// bool start = false;
// do
// {
// temp = (f >> (sf - 4)) & 0xf;
// if (temp != 0) start = true;
// if (start) vx_print_str(hextoa[temp]);
// sf -= 4;
// } while(sf > 0);
}
void vx_printf(char * c, unsigned f)
{
vx_print_str(c);
vx_print_hex(f);
vx_print_str("\n");
}

10
runtime/io/vx_io.h Normal file
View File

@@ -0,0 +1,10 @@
#pragma once
#include <stdbool.h>
static char * hextoa[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
void vx_print_hex(unsigned);
void vx_print_str(char *);
void vx_printf(char *, unsigned);
void vx_printc(unsigned, char c);

30
runtime/io/vx_io.s Normal file
View File

@@ -0,0 +1,30 @@
.type vx_print_str, @function
.global vx_print_str
vx_print_str:
addi sp, sp, -12
sw ra, 0(sp)
sw a1, 4(sp)
bl:
lbu a1,0(a0)
beqz a1,be
jal vx_printc
addi a0, a0, 1
j bl
be:
lw ra, 0(sp)
lw a1, 4(sp)
addi sp, sp, 12
ret
.type vx_printc, @function
.global vx_printc
vx_printc:
la t0, 0x00010000
sw a1, 0(t0)
ret

48
runtime/linker.ld Normal file
View File

@@ -0,0 +1,48 @@
/* ---- Original Script: /opt/riscv32i/riscv32-unknown-elf/lib/ldscripts/elf32lriscv.x ---- */
/* Default linker script, for normal executables */
/* Copyright (C) 2014-2017 Free Software Foundation, Inc.
Copying and distribution of this script, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. */
OUTPUT_FORMAT("elf32-littleriscv", "elf32-littleriscv",
"elf32-littleriscv")
OUTPUT_ARCH(riscv)
ENTRY(_start)
SECTIONS
{
. = 0x80000000;
.text :
{
*(.text)
*(.text.unlikely .text.*_unlikely .text.unlikely.*)
*(.text.exit .text.exit.*)
*(.text.startup .text.startup.*)
*(.text.hot .text.hot.*)
*(.stub .text.* .gnu.linkonce.t.*)
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
}
.init :
{
KEEP (*(SORT_NONE(.init)))
}
.plt : { *(.plt) }
.iplt : { *(.iplt) }
.fini :
{
KEEP (*(SORT_NONE(.fini)))
}
PROVIDE (__etext = .);
PROVIDE (_etext = .);
PROVIDE (etext = .);
PROVIDE (_edata = .);
PROVIDE (_end = .);
PROVIDE (__global_pointer$ = .);
. = 0x81000000;
.rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
.rodata1 : { *(.rodata1) }
. = 0x82000000;
.comment : { *(.comment) }
}

View File

@@ -0,0 +1,42 @@
.type _start, @function
.global _start
_start:
li a0, 4
.word 0x0005006b # tmc a0
csrr a1,0x20
slli a1, a1, 2
la a2, 0x20000000
add a2, a2, a1
sw a1, 0(a2)
la a2, 0x40000000
add a2, a2, a1
li a3, 5
sw a3, 0(a2)
la a2, 0x80000000
add a2, a2, a1
li a3, 7
sw a3, 0(a2)
la a2, 0x60000000
add a2, a2, a1
li a3, 7
sw a3, 0(a2)
la a2, 0x20000000
add a2, a2, a1
lw a4, 0(a2)
li a0, 0
.word 0x0005006b # tmc a0
##########################
# lui sp, 0x7ffff
# jal main
# li a0, 0
# .word 0x0005006b # tmc a0

293
runtime/vortex_runtime.dump Normal file
View File

@@ -0,0 +1,293 @@
vortex_runtime.elf: file format elf32-littleriscv
Disassembly of section .text:
80000000 <_start>:
80000000: 00400513 li a0,4
80000004: 0005006b 0x5006b
80000008: 020025f3 csrr a1,0x20
8000000c: 00259593 slli a1,a1,0x2
80000010: 20000637 lui a2,0x20000
80000014: 00b60633 add a2,a2,a1
80000018: 00b62023 sw a1,0(a2) # 20000000 <_start-0x60000000>
8000001c: 40000637 lui a2,0x40000
80000020: 00b60633 add a2,a2,a1
80000024: 00500693 li a3,5
80000028: 00d62023 sw a3,0(a2) # 40000000 <_start-0x40000000>
8000002c: 80000637 lui a2,0x80000
80000030: 00b60633 add a2,a2,a1
80000034: 00700693 li a3,7
80000038: 00d62023 sw a3,0(a2) # 80000000 <arr+0xfefffefc>
8000003c: 60000637 lui a2,0x60000
80000040: 00b60633 add a2,a2,a1
80000044: 00700693 li a3,7
80000048: 00d62023 sw a3,0(a2) # 60000000 <_start-0x20000000>
8000004c: 20000637 lui a2,0x20000
80000050: 00b60633 add a2,a2,a1
80000054: 00062703 lw a4,0(a2) # 20000000 <_start-0x60000000>
80000058: 00000513 li a0,0
8000005c: 0005006b 0x5006b
80000060 <vx_wsapwn>:
80000060: 00b5106b 0xb5106b
80000064: 00008067 ret
80000068 <vx_tmc>:
80000068: 0005006b 0x5006b
8000006c: 00008067 ret
80000070 <vx_barrier>:
80000070: 00b5406b 0xb5406b
80000074: 00008067 ret
80000078 <vx_split>:
80000078: 0005206b 0x5206b
8000007c <vx_join>:
8000007c: 0000306b 0x306b
80000080: 00008067 ret
80000084 <vx_warpID>:
80000084: 02102573 csrr a0,0x21
80000088: 00008067 ret
8000008c <vx_threadID>:
8000008c: 02002573 csrr a0,0x20
80000090: 00008067 ret
80000094 <vx_print_str>:
80000094: ff410113 addi sp,sp,-12
80000098: 00112023 sw ra,0(sp)
8000009c: 00b12223 sw a1,4(sp)
800000a0 <bl>:
800000a0: 00054583 lbu a1,0(a0)
800000a4: 00058863 beqz a1,800000b4 <be>
800000a8: 01c000ef jal ra,800000c4 <vx_printc>
800000ac: 00150513 addi a0,a0,1
800000b0: ff1ff06f j 800000a0 <bl>
800000b4 <be>:
800000b4: 00012083 lw ra,0(sp)
800000b8: 00412583 lw a1,4(sp)
800000bc: 00c10113 addi sp,sp,12
800000c0: 00008067 ret
800000c4 <vx_printc>:
800000c4: 000102b7 lui t0,0x10
800000c8: 00b2a023 sw a1,0(t0) # 10000 <_start-0x7fff0000>
800000cc: 00008067 ret
800000d0 <vx_print_hex>:
800000d0: fe010113 addi sp,sp,-32
800000d4: 00112e23 sw ra,28(sp)
800000d8: 00812c23 sw s0,24(sp)
800000dc: 02010413 addi s0,sp,32
800000e0: fea42623 sw a0,-20(s0)
800000e4: 810007b7 lui a5,0x81000
800000e8: fec42703 lw a4,-20(s0)
800000ec: 00271713 slli a4,a4,0x2
800000f0: 08478793 addi a5,a5,132 # 81000084 <arr+0xffffff80>
800000f4: 00f707b3 add a5,a4,a5
800000f8: 0007a783 lw a5,0(a5)
800000fc: 00078513 mv a0,a5
80000100: f95ff0ef jal ra,80000094 <vx_print_str>
80000104: 00000013 nop
80000108: 01c12083 lw ra,28(sp)
8000010c: 01812403 lw s0,24(sp)
80000110: 02010113 addi sp,sp,32
80000114: 00008067 ret
80000118 <vx_printf>:
80000118: fe010113 addi sp,sp,-32
8000011c: 00112e23 sw ra,28(sp)
80000120: 00812c23 sw s0,24(sp)
80000124: 02010413 addi s0,sp,32
80000128: fea42623 sw a0,-20(s0)
8000012c: feb42423 sw a1,-24(s0)
80000130: fec42503 lw a0,-20(s0)
80000134: f61ff0ef jal ra,80000094 <vx_print_str>
80000138: fe842503 lw a0,-24(s0)
8000013c: f95ff0ef jal ra,800000d0 <vx_print_hex>
80000140: 810007b7 lui a5,0x81000
80000144: 04078513 addi a0,a5,64 # 81000040 <arr+0xffffff3c>
80000148: f4dff0ef jal ra,80000094 <vx_print_str>
8000014c: 00000013 nop
80000150: 01c12083 lw ra,28(sp)
80000154: 01812403 lw s0,24(sp)
80000158: 02010113 addi sp,sp,32
8000015c: 00008067 ret
80000160 <main>:
80000160: fe010113 addi sp,sp,-32
80000164: 00112e23 sw ra,28(sp)
80000168: 00812c23 sw s0,24(sp)
8000016c: 02010413 addi s0,sp,32
80000170: 00400513 li a0,4
80000174: ef5ff0ef jal ra,80000068 <vx_tmc>
80000178: f15ff0ef jal ra,8000008c <vx_threadID>
8000017c: fea42623 sw a0,-20(s0)
80000180: fec42703 lw a4,-20(s0)
80000184: 810007b7 lui a5,0x81000
80000188: fec42683 lw a3,-20(s0)
8000018c: 00269693 slli a3,a3,0x2
80000190: 10478793 addi a5,a5,260 # 81000104 <arr+0x0>
80000194: 00f687b3 add a5,a3,a5
80000198: 00e7a023 sw a4,0(a5)
8000019c: 00000793 li a5,0
800001a0: 00078513 mv a0,a5
800001a4: 01c12083 lw ra,28(sp)
800001a8: 01812403 lw s0,24(sp)
800001ac: 02010113 addi sp,sp,32
800001b0: 00008067 ret
Disassembly of section .rodata:
81000000 <.rodata>:
81000000: 0030 addi a2,sp,8
81000002: 0000 unimp
81000004: 0031 c.nop 12
81000006: 0000 unimp
81000008: 0032 c.slli zero,0xc
8100000a: 0000 unimp
8100000c: 00000033 add zero,zero,zero
81000010: 0034 addi a3,sp,8
81000012: 0000 unimp
81000014: 0035 c.nop 13
81000016: 0000 unimp
81000018: 0036 c.slli zero,0xd
8100001a: 0000 unimp
8100001c: 00000037 lui zero,0x0
81000020: 0038 addi a4,sp,8
81000022: 0000 unimp
81000024: 0039 c.nop 14
81000026: 0000 unimp
81000028: 0061 c.nop 24
8100002a: 0000 unimp
8100002c: 0062 c.slli zero,0x18
8100002e: 0000 unimp
81000030: 00000063 beqz zero,81000030 <main+0xfffed0>
81000034: 0064 addi s1,sp,12
81000036: 0000 unimp
81000038: 0065 c.nop 25
8100003a: 0000 unimp
8100003c: 0066 c.slli zero,0x19
8100003e: 0000 unimp
81000040: 000a c.slli zero,0x2
81000042: 0000 unimp
81000044: 0030 addi a2,sp,8
81000046: 0000 unimp
81000048: 0031 c.nop 12
8100004a: 0000 unimp
8100004c: 0032 c.slli zero,0xc
8100004e: 0000 unimp
81000050: 00000033 add zero,zero,zero
81000054: 0034 addi a3,sp,8
81000056: 0000 unimp
81000058: 0035 c.nop 13
8100005a: 0000 unimp
8100005c: 0036 c.slli zero,0xd
8100005e: 0000 unimp
81000060: 00000037 lui zero,0x0
81000064: 0038 addi a4,sp,8
81000066: 0000 unimp
81000068: 0039 c.nop 14
8100006a: 0000 unimp
8100006c: 0061 c.nop 24
8100006e: 0000 unimp
81000070: 0062 c.slli zero,0x18
81000072: 0000 unimp
81000074: 00000063 beqz zero,81000074 <main+0xffff14>
81000078: 0064 addi s1,sp,12
8100007a: 0000 unimp
8100007c: 0065 c.nop 25
8100007e: 0000 unimp
81000080: 0066 c.slli zero,0x19
Disassembly of section .data:
81000084 <hextoa>:
81000084: 0000 unimp
81000086: 8100 0x8100
81000088: 0004 0x4
8100008a: 8100 0x8100
8100008c: 0008 0x8
8100008e: 8100 0x8100
81000090: 000c 0xc
81000092: 8100 0x8100
81000094: 0010 0x10
81000096: 8100 0x8100
81000098: 0014 0x14
8100009a: 8100 0x8100
8100009c: 0018 0x18
8100009e: 8100 0x8100
810000a0: 001c 0x1c
810000a2: 8100 0x8100
810000a4: 0020 addi s0,sp,8
810000a6: 8100 0x8100
810000a8: 0024 addi s1,sp,8
810000aa: 8100 0x8100
810000ac: 0028 addi a0,sp,8
810000ae: 8100 0x8100
810000b0: 002c addi a1,sp,8
810000b2: 8100 0x8100
810000b4: 0030 addi a2,sp,8
810000b6: 8100 0x8100
810000b8: 0034 addi a3,sp,8
810000ba: 8100 0x8100
810000bc: 0038 addi a4,sp,8
810000be: 8100 0x8100
810000c0: 003c addi a5,sp,8
810000c2: 8100 0x8100
810000c4 <hextoa>:
810000c4: 0044 addi s1,sp,4
810000c6: 8100 0x8100
810000c8: 0048 addi a0,sp,4
810000ca: 8100 0x8100
810000cc: 004c addi a1,sp,4
810000ce: 8100 0x8100
810000d0: 0050 addi a2,sp,4
810000d2: 8100 0x8100
810000d4: 0054 addi a3,sp,4
810000d6: 8100 0x8100
810000d8: 0058 addi a4,sp,4
810000da: 8100 0x8100
810000dc: 005c addi a5,sp,4
810000de: 8100 0x8100
810000e0: 0060 addi s0,sp,12
810000e2: 8100 0x8100
810000e4: 0064 addi s1,sp,12
810000e6: 8100 0x8100
810000e8: 0068 addi a0,sp,12
810000ea: 8100 0x8100
810000ec: 006c addi a1,sp,12
810000ee: 8100 0x8100
810000f0: 0070 addi a2,sp,12
810000f2: 8100 0x8100
810000f4: 0074 addi a3,sp,12
810000f6: 8100 0x8100
810000f8: 0078 addi a4,sp,12
810000fa: 8100 0x8100
810000fc: 007c addi a5,sp,12
810000fe: 8100 0x8100
81000100: 0080 addi s0,sp,64
81000102: 8100 0x8100
Disassembly of section .bss:
81000104 <arr>:
...
Disassembly of section .comment:
82000000 <.comment>:
82000000: 3a434347 fmsub.d ft6,ft6,ft4,ft7,rmm
82000004: 2820 fld fs0,80(s0)
82000006: 29554e47 fmsub.s ft8,fa0,fs5,ft5,rmm
8200000a: 3820 fld fs0,112(s0)
8200000c: 322e fld ft4,232(sp)
8200000e: 302e fld ft0,232(sp)
...

BIN
runtime/vortex_runtime.elf Normal file

Binary file not shown.

View File

@@ -0,0 +1,49 @@
:0200000480007A
:10000000130540006B000500F325000293952500C1
:10001000370600203306B6002320B600370600401E
:100020003306B600930650002320D6003706008022
:100030003306B600930670002320D6003706006012
:100040003306B600930670002320D6003706002042
:100050003306B60003270600130500006B000500F9
:100060006B10B500678000006B0005006780000022
:100070006B40B500678000006B2005006B3000000E
:10008000678000007325100267800000732500025E
:1000900067800000130141FF232011002322B100DB
:1000A0008345050063880500EF00C00113051500B6
:1000B0006FF01FFF83200100832541001301C10061
:1000C00067800000B702010023A0B2006780000033
:1000D000130101FE232E1100232C810013040102C1
:1000E0002326A4FEB70700810327C4FE13172700A9
:1000F00093874708B307F70083A707001385070016
:10010000EFF05FF9130000008320C1010324810197
:100110001301010267800000130101FE232E11006C
:10012000232C8100130401022326A4FE2324B4FE01
:100130000325C4FEEFF01FF6032584FEEFF05FF900
:10014000B707008113850704EFF0DFF41300000008
:100150008320C10103248101130101026780000093
:10016000130101FE232E1100232C81001304010230
:1001700013054000EFF05FEFEFF05FF12326A4FEE0
:100180000327C4FEB70700818326C4FE939626008A
:1001900093874710B387F60023A0E700930700007A
:1001A000138507008320C10103248101130101028B
:0401B0006780000064
:02000004810079
:10000000300000003100000032000000330000002A
:10001000340000003500000036000000370000000A
:10002000380000003900000061000000620000009C
:10003000630000006400000065000000660000002E
:100040000A00000030000000310000003200000013
:1000500033000000340000003500000036000000CE
:100060003700000038000000390000006100000087
:1000700062000000630000006400000065000000F2
:02008000660018
:100084000000008104000081080000810C00008150
:100094001000008114000081180000811C00008100
:1000A4002000008124000081280000812C000081B0
:1000B4003000008134000081380000813C00008160
:1000C40044000081480000814C0000815000008100
:1000D40054000081580000815C00008160000081B0
:1000E40064000081680000816C0000817000008160
:1000F40074000081780000817C0000818000008110
:040000058000000077
:00000001FF

31
runtime/vx_main.c Normal file
View File

@@ -0,0 +1,31 @@
#include "intrinsics/vx_intrinsics.h"
#include "io/vx_io.h"
int arr[4];
int main()
{
// vx_print_str("Hello from runtime\n");
vx_tmc(4); // Activate 4 threads
unsigned tid = vx_threadID(); // Get TID
arr[tid] = tid;
// vx_tmc(1);
// vx_print_hex(arr[0]);
// vx_print_str("\n");
// vx_print_hex(arr[1]);
// vx_print_str("\n");
// vx_print_hex(arr[2]);
// vx_print_str("\n");
// vx_print_hex(arr[3]);
// vx_print_str("\n");
return 0;
}