This commit is contained in:
Savan Roshan 2019-11-07 00:16:09 -05:00
commit 3372baea87
29 changed files with 0 additions and 5086 deletions

BIN
kernel/.DS_Store vendored

Binary file not shown.

View file

@ -1,25 +0,0 @@
COMP = /opt/riscv/bin/riscv32-unknown-elf-gcc
# COMP = /opt/riscv/bin/riscv32-unknown-linux-gnu-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
# DMP = /opt/riscv/bin/riscv32-unknown-linux-gnu-objdump
# CPY = /opt/riscv/bin/riscv32-unknown-linux-gnu-objcopy
VX_LIB = ./vx_os/vx_back/vx_back.s ./vx_os/vx_back/vx_back.c ./vx_os/vx_util/queue.s
VX_IO = ./vx_os/vx_io/vx_io.s ./vx_os/vx_io/vx_io.c
VX_FR = ./vx_include/vx_front.c
all: HEX DUMP ELF
DUMP: ELF
$(DMP) -D vortex_test.elf > vortex_test.dump
HEX: ELF
$(CPY) -O ihex vortex_test.elf vortex_test.hex
ELF:
$(COMP) $(CC_FLAGS) $(VX_LIB) $(VX_IO) $(VX_FR) vx_main.c -o vortex_test.elf

View file

@ -1,48 +0,0 @@
/* ---- 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) }
}

File diff suppressed because it is too large Load diff

Binary file not shown.

View file

@ -1,436 +0,0 @@
:0200000480007A
:1000000037F1FF7FEF101004130500006B000500AF
:10001000938B0600130D0700130F010093030500D7
:1000200013051000635C75001301018013030500C4
:100030006B500300130515006FF0DFFE1300000086
:100040001300000013000000130000001300000064
:100050001300000013010F0013050000930F0600AA
:10006000938D030013000000130000001300000034
:100070001300000013000000130000001300000034
:1000800013000000EBE0BF011300000013000000AC
:100090001300000013000000130000001300000014
:1000A000170500001305451B6B40050017030000F2
:1000B000130343F66B000300678000001702000182
:1000C000130282252320020023221200232422006F
:1000D0002326320023284200232A5200232C6200C8
:1000E000232E720023208202232292022324A202C2
:1000F0002326B2022328C202232AD202232CE202A0
:10010000232EF20223200205232212052324220596
:100110002326320523284205232A5205232C620573
:10012000232E720523208207232292072324A2076D
:100130002326B2072328C207232AD207232CE2074B
:10014000232EF2071302100067800000170200013F
:100150001302821C0320020083204200032182003C
:100160008321C20003220201832242010323820170
:100170008323C20103240202832442020325820254
:100180008325C20203260203832642030327820338
:100190008327C2030328020483284204032982041C
:1001A0008329C204032A0205832A4205032B820500
:1001B000832BC205032C0206832C4206032D8206E4
:1001C000832DC206032E0207832E4207032F8207C8
:1001D000832FC2071302000067800000732500020E
:1001E000678000007325100267800000130101FE84
:1001F000232E1100232C810013040102232604FE68
:100200006F0040030327C4FEB7170000938747978A
:100210003307F702B707008193874741B307F70019
:1002200013850700EF0000448327C4FE938717005F
:100230002326F4FE0327C4FE9307F001E3D4E7FC72
:10024000130000008320C101032481011301010276
:1002500067800000130101FD23261102232481027F
:100260002322A103130401031300000013070D0050
:10027000B7170000938747973307F702B707008146
:1002800093874741B307F70013850700EF004050FD
:1002900093070500638A070213070D00B707008163
:1002A000131727009387C726B307F700130710001B
:1002B00023A0E70093070D0063960700EFF01FE906
:1002C0006F00C0057300000013070D00B717000092
:1002D000938747973307F702B70700819387474112
:1002E000B307F700130784FD930507001385070084
:1002F000EF000040832704FE138107008327C4FD1D
:10030000832584FD032644FE832684FE0327C4FE42
:1003100013850700EFF0DFCF730000008320C102D8
:1003200003248102032D41021301010367800000B1
:10033000130101FB23261104232481041304010566
:10034000EFF0DFE92324A4FE9309010093071000D6
:100350002326F4FE6F00C0080327C4FEB717000071
:10036000938747973307F702B70700819387474181
:10037000B307F70013850700EF00804193070500DE
:10038000639A07040327C4FEB717000093874797B3
:100390003307F702B707008193874741B307F70098
:1003A000130704FD9305070013850700EF00403491
:1003B000832784FD13810700832744FD832504FDE3
:1003C0000326C4FD832604FE032744FE138507008D
:1003D000EFF0DFCD8327C4FE938717002326F4FEBA
:1003E0008327C4FE032784FEE3E8E7F613810900B0
:1003F000EFF0DFCC9307020063880704B7070081A2
:1004000013854741EF00C03893070500639E07023C
:10041000930784FB93850700B70700811385474145
:10042000EF00002D832704FC138107008327C4FB02
:10043000832584FB032644FC832684FC0327C4FC19
:1004400013850700EFF0DFBC130000008320C10418
:10045000032481041301010567800000130101FBDF
:10046000232611042324810413040105232EA4FA56
:10047000232CB4FA232AC4FA2328D4FAEFF01FD786
:10048000EFF0DFD52322A4FE13090100232604FE8A
:10049000232404FE6F000009B709FFFF3301310177
:1004A000832784FE2326F4FC832784FB2328F4FC83
:1004B00093070100232AF4FC832744FB232CF4FC3C
:1004C000832704FB232EF4FC8327C4FE2320F4FEA1
:1004D0000327C4FEB7170000938747973307F70237
:1004E000B707008193874741B307F7001307C4FCA0
:1004F0009305070013850700EF0000198327C4FE4A
:10050000938717002326F4FE8327C4FE032744FEA7
:1005100063E4E700232604FE832784FE9387170005
:100520002324F4FE032784FE8327C4FBE366F7F647
:1005300013010900EFF0DFDF130000008320C10486
:10054000032481041301010567800000130101FDEC
:10055000232611022324810213040103232EA4FC69
:100560008325C4FDB707008113850704EF00802DA4
:10057000EFF0DFC62320A4FE232604FE6F008006D2
:10058000930710002326F4FE232404FE6F00C0030B
:10059000B7070081032784FE131727009387C72618
:1005A000B307F70003A70700930710006318F700CD
:1005B0008327C4FE938717002326F4FE832784FE37
:1005C000938717002324F4FE032784FE9307F0018A
:1005D000E3D0E7FC8325C4FEB70700811385C70479
:1005E000EF0040260327C4FE8327C4FDE36AF7F823
:1005F000232204FE6F008002B7070081032744FE18
:10060000131727009387C726B307F70023A0070017
:10061000832744FE938717002322F4FE832744FE9A
:10062000032704FEE3EAE7FC130000008320C10275
:10063000032481021301010367800000130101FFFD
:1006400023268100232471011304010193870B00E9
:10065000138507000324C100832B810013010101CE
:1006600067800000930205001303000093037000ED
:1006700023A0620023A2620023A4620023A67200CA
:1006800023A86200678000009302050003A3820094
:100690001303130023A462001383420183AE4200BC
:1006A00093935E003303730003AE05002320C30160
:1006B00003AE45002322C30103AE85002324C301FA
:1006C00003AEC5002326C30103AE05012328C301E1
:1006D00003AE4501232AC301938E1E00130F20038E
:1006E0006394EE01930E000023A2D2016780000004
:1006F0009302050003A38200130000001300000012
:10070000130000001300000013000000130000009D
:100710001303F3FF23A462001383420183AE02009C
:10072000930F2003138F0E00130F1F006314FF019C
:10073000130F000023A0E20193935E0033037300C4
:10074000032E030023A0C501032E430023A2C501ED
:10075000032E830023A4C501032EC30023A6C501D5
:10076000032E030123A8C501032E430123AAC501BB
:10077000678000009302050003A3820013050000B8
:10078000130E200363146E0013051500678000002C
:100790009302050003A3820013050000130E00005E
:1007A00063146E00130515006780000093020500B6
:1007B00003A3C20083A3020133B563006780000076
:1007C000130141FF232011002322B10083450500BE
:1007D00063880500EF00C001130515006FF01FFFCF
:1007E00083200100832541001301C10067800000C0
:1007F000B708010023A0B80067800000130101FEC4
:10080000232E1100232C8100130401022326A4FEB1
:10081000B70700810327C4FE131727009387871AA1
:10082000B307F70083A7070013850700EFF05FF910
:10083000130000008320C101032481011301010280
:1008400067800000130101FE232E1100232C81007C
:10085000130401022326A4FE2324B4FE0325C4FEB0
:10086000EFF01FF6032584FEEFF05FF9B707008174
:1008700013854709EFF0DFF4130000008320C10166
:10088000032481011301010267800000130101FDAF
:10089000232611022324810213040103232EA4FC26
:1008A000232CB4FC232AC4FC2328D4FCB767028180
:1008B0000327C4FD23AEE71AB76702819387C71BDE
:1008C000032784FD23A2E700B76702819387C71B34
:1008D000032744FD23A4E700B76702819387C71B62
:1008E000032704FD23A6E700EFF0DF8F2324A4FEF7
:1008F000032704FD832784FEB357F7022326F4FE63
:10090000032704FD832784FEB377F702638807007B
:100910008327C4FE938717002326F4FEB76702815E
:100920009387C71B0327C4FE23A8E700032704FD02
:10093000832784FE6362F702B76702819386C71B31
:10094000B71700801386079B832584FE032504FDCB
:10095000EFF0DFB06F000002B76702819386C71B1C
:10096000B71700801386079B832504FD032504FD2C
:10097000EFF0DFAEEFF09F862322A4FE032704FDF5
:10098000832744FE63F8E700032544FEEFF01FBC15
:100990006F00C000032504FDEFF05FBB13000000F3
:1009A0008320C10203248102130101036780000038
:1009B000130101FA232E1104232C810413040106D0
:1009C0002326A4FA2324B4FAEFF05FC7232CA4FC57
:1009D000832784FD83A70700232AF4FC832784FD53
:1009E00083A747002328F4FC832784FD83A787007F
:1009F0002326F4FC832784FD83A707012326F4FE26
:100A00000327C4FE8327C4FAB307F7022324F4FEA6
:100A10008327C4FE639A0700930710002326F4FE81
:100A20008327C4FA2324F4FE832784FD83A7C70009
:100A30002324F4FC232204FE6F00800D232004FEF7
:100A4000232E04FC6F008007032784FA832784FC8D
:100A5000B307F7020327C4FDB307F7002322F4FC12
:100A6000032784FC8327C4FDB307F702032784FE12
:100A7000B307F7002320F4FC832744FC9397270057
:100A8000032744FDB307F70003A70700832704FCEF
:100A900093972700832604FDB387F60083A70700FA
:100AA000B307F702032704FEB307F7002320F4FE81
:100AB0008327C4FD93871700232EF4FC0327C4FD6E
:100AC000832784FCE362F7F8032784FA832784FCF6
:100AD0003307F702832784FEB307F700232EF4FAC7
:100AE0008327C4FB939727000327C4FCB307F700B1
:100AF000032704FE23A0E700832784FE93871700C3
:100B00002324F4FE832744FE938717002322F4FE58
:100B1000832744FE0327C4FEE3E2E7F2130000004C
:100B20008320C105032481051301010667800000AD
:100B3000130101FC232E1102232C81021304010452
:100B4000232EA4FC232CB4FC232AC4FC2328D4FC8D
:100B50002326E4FCB76702810327C4FD23A8E71C12
:100B6000B76702819387071D032784FD23A2E7004F
:100B7000B76702819387071D032744FD23A4E7007D
:100B8000B76702819387071D0327C4FC23A6E700EC
:100B9000B76702819387071D032704FD23A8E70099
:100BA000EFF04FE42324A4FE0327C4FC832784FE34
:100BB000B357F7022326F4FE0327C4FC832784FEE1
:100BC000B377F702638807008327C4FE9387170073
:100BD0002326F4FEB76702819387071D0327C4FE0F
:100BE00023AAE7000327C4FC832784FE6362F7027D
:100BF000B76702819386071DB7170080138687C6E3
:100C0000832584FE032504FDEFF05F856F0000025D
:100C1000B76702819386071DB7170080138687C6C2
:100C20008325C4FC032504FDEFF05F83EFF00FDBA9
:100C30002322A4FE032704FD832744FE63F8E70074
:100C4000032544FEEFF09F906F00C000032504FDD4
:100C5000EFF0DF8F130000008320C1030324810322
:100C60001301010467800000130101FB2326110416
:100C70002324810413040105232EA4FA232CB4FA9F
:100C8000EFF0DF9B2320A4FE832704FE83A7070049
:100C9000232EF4FC832704FE83A74700232CF4FCB7
:100CA000832704FE83A78700232AF4FC832704FEFE
:100CB00083A747012326F4FE0327C4FE8327C4FB32
:100CC000B307F7022324F4FE8327C4FE639A0700C8
:100CD000930710002326F4FE8327C4FB2324F4FE8D
:100CE000832704FE83A7C7002328F4FC232204FEE5
:100CF0006F00000C032784FB832704FD3307F702F2
:100D0000832784FEB307F7002326F4FC032784FE21
:100D1000832704FDB337F70093F7F70F2324F4FC80
:100D2000832784FC93B71700A303F4FC834774FC68
:100D3000138F0700B7170080938FC7D96B200F0060
:100D40007B70FF018327C4FC939727000327C4FD12
:100D5000B307F70083A607008327C4FC93972700F7
:100D6000032784FDB307F70003A707008327C4FC0C
:100D700093972700032644FDB307F6003387E60068
:100D800023A0E700832784FE938717002324F4FE23
:100D9000B7170080138E07DA67000E0013000000FB
:100DA0006B300000832744FE938717002322F4FE54
:100DB000832744FE0327C4FEE3EEE7F2130000009E
:100DC0008320C1040324810413010105678000000E
:100DD000130101FC232E1102232C810213040104B0
:100DE000232EA4FC232CB4FC232AC4FC2328D4FCEB
:100DF0002326E4FCB76702810327C4FD23A8E71C70
:100E0000B76702819387071D032784FD23A2E700AC
:100E1000B76702819387071D032744FD23A4E700DA
:100E2000B76702819387071D0327C4FC23A6E70049
:100E3000B76702819387071D032704FD23A8E700F6
:100E4000EFF04FBA2324A4FE0327C4FC832784FEBB
:100E5000B357F7022326F4FE0327C4FC832784FE3E
:100E6000B377F702638807008327C4FE93871700D0
:100E70002326F4FEB76702819387071D0327C4FE6C
:100E800023AAE7000327C4FC832784FE6362F702DA
:100E9000B76702819386071DB7170080138687F016
:100EA000832584FE032504FDEFF04FDB6F00000275
:100EB000B76702819386071DB7170080138687F0F6
:100EC0008325C4FC032504FDEFF04FD9EFF00FB1EB
:100ED0002322A4FE032704FD832744FE63F8E700D2
:100EE000032544FEEFF08FE66F00C000032504FDEC
:100EF000EFF0CFE5130000008320C103032481033A
:100F00001301010467800000130101FB2326110473
:100F10002324810413040105232EA4FA232CB4FAFC
:100F2000EFF0CFF12320A4FE832704FE83A7070060
:100F3000232EF4FC832704FE83A74700232CF4FC14
:100F4000832704FE83A78700232AF4FC832704FE5B
:100F500083A747012326F4FE0327C4FE8327C4FB8F
:100F6000B307F7022324F4FE8327C4FE639A070025
:100F7000930710002326F4FE8327C4FB2324F4FEEA
:100F8000832704FE83A7C7002328F4FC232204FE42
:100F90006F00000C032784FB832704FD3307F7024F
:100FA000832784FEB307F7002326F4FC032784FE7F
:100FB000832704FDB337F70093F7F70F2324F4FCDE
:100FC000832784FC93B71700A303F4FC834774FCC6
:100FD000138F0700B7170080938FC7036B200F0094
:100FE0007B70FF018327C4FC939727000327C4FD70
:100FF000B307F70083A607008327C4FC9397270055
:10100000032784FDB307F70003A707008327C4FC69
:1010100093972700032644FDB307F6003387E64085
:1010200023A0E700832784FE938717002324F4FE80
:10103000B7170080138E070467000E00130000002E
:101040006B300000832744FE938717002322F4FEB1
:10105000832744FE0327C4FEE3EEE7F213000000FB
:101060008320C1040324810413010105678000006B
:10107000130101FC232E1102232C8102130401040D
:10108000232EA4FC232CB4FC232AC4FC2328D4FC48
:101090002326E4FCB76702810327C4FD23A4E71ECF
:1010A000B76702819387871E032784FD23A2E70089
:1010B000B76702819387871E032744FD23A4E700B7
:1010C000B76702819387871E0327C4FC23A6E70026
:1010D000B76702819387871E032704FD23A8E700D3
:1010E000EFF04F902324A4FE0327C4FC832784FE43
:1010F000B357F7022326F4FE0327C4FC832784FE9C
:10110000B377F702638807008327C4FE938717002D
:101110002326F4FEB76702819387871E0327C4FE48
:1011200023AAE7000327C4FC832784FE6362F70237
:10113000B76702819386871EB71700801386871AC8
:10114000832584FE032504FDEFF04FB16F000002FC
:10115000B76702819386871EB71700801386871AA8
:101160008325C4FC032504FDEFF04FAFEFF00F879C
:101170002322A4FE032704FD832744FE63F8E7002F
:10118000032544FEEFF08FBC6F00C000032504FD73
:10119000EFF0CFBB130000008320C10303248103C1
:1011A0001301010467800000130101FB23261104D1
:1011B0002324810413040105232EA4FA232CB4FA5A
:1011C000EFF0CFC72320A4FE832704FE83A70700E8
:1011D000232EF4FC832704FE83A7470083A7070080
:1011E000232CF4FC832704FE83A78700232AF4FC26
:1011F000832704FE83A747012326F4FE0327C4FEAA
:101200008327C4FBB307F7022324F4FE8327C4FE1D
:10121000639A0700930710002326F4FE8327C4FB7C
:101220002324F4FE832704FE83A7C7002328F4FCAD
:10123000232204FE6F00000B032784FB832704FD99
:101240003307F702832784FEB307F7002326F4FC55
:10125000032784FE832704FDB337F70093F7F70FC6
:101260002324F4FC832784FC93B71700A303F4FC26
:10127000834774FC138F0700B7170080938F072DE7
:101280006B200F007B70FF018327C4FC939727001E
:101290000327C4FDB307F70083A607008327C4FC18
:1012A00093972700032744FDB307F700032784FD26
:1012B0003387E60023A0E700832784FE9387170087
:1012C0002324F4FEB7170080138E472D67000E000D
:1012D000130000006B300000832744FE9387170043
:1012E0002322F4FE832744FE0327C4FEE3E6E7F44B
:1012F000130000008320C1040324810413010105AD
:1013000067800000130101FC232E1102232C8102AF
:1013100013040104232EA4FC232CB4FC232AC4FCB4
:101320002328D4FC2326E4FCB76702810327C4FDED
:1013300023A4E71EB76702819387871E032784FDD6
:1013400023A2E700B76702819387871E032744FD26
:1013500023A4E700B76702819387871E0327C4FC95
:1013600023A6E700B76702819387871E032704FD42
:1013700023A8E700EFE01FE72324A4FE0327C4FC13
:10138000832784FEB357F7022326F4FE0327C4FC09
:10139000832784FEB377F702638807008327C4FEA0
:1013A000938717002326F4FEB76702819387871E71
:1013B0000327C4FE23AAE7000327C4FC832784FE77
:1013C0006362F702B76702819386871EB7170080B2
:1013D0001386C743832584FE032504FDEFF00F88A1
:1013E0006F000002B76702819386871EB7170080DF
:1013F0001386C7438325C4FC032504FDEFF00F8645
:10140000EFE0DFDD2322A4FE032704FD832744FE53
:1014100063F8E700032544FEEFF04F936F00C00030
:10142000032504FDEFF08F92130000008320C10319
:10143000032481031301010467800000130101FBF1
:10144000232611042324810413040105232EA4FA66
:10145000232CB4FAEFF08F9E2320A4FE832704FEF2
:1014600083A70700232EF4FC832704FE83A74700ED
:1014700083A70700232CF4FC832704FE83A787009F
:10148000232AF4FC832704FE83A747012326F4FEC6
:101490000327C4FE8327C4FBB307F7022324F4FE0B
:1014A0008327C4FE639A0700930710002326F4FEE7
:1014B0008327C4FB2324F4FE832704FE83A7C700ED
:1014C0002328F4FC232204FE6F00000B032784FB77
:1014D000832704FD3307F702832784FEB307F70051
:1014E0002326F4FC032784FE832704FDB337F7008B
:1014F00093F7F70F2324F4FC832784FC93B717009A
:10150000A303F4FC834774FC138F0700B717008014
:10151000938F47566B200F007B70FF018327C4FC1D
:10152000939727000327C4FDB307F70083A607009E
:101530008327C4FC93972700032744FDB307F700D4
:10154000032784FD3387E60223A0E700832784FE78
:10155000938717002324F4FEB7170080138E875655
:1015600067000E00130000006B300000832744FE6C
:10157000938717002322F4FE832744FE0327C4FE2B
:10158000E3E6E7F4130000008320C1040324810490
:101590001301010567800000130101FD232681026C
:1015A00013040103232EA4FC232604FE6F00000174
:1015B0008327C4FE938717002326F4FE0327C4FE67
:1015C0008327C4FDE346F7FE130000000324C10295
:1015D0001301010367800000130101FD232611029E
:1015E0002324810213040103232EA4FC232CB4FC26
:1015F000B7670281138707208327C4FDB307F7006D
:10160000130710002380E7008327C4FD6390070CB5
:10161000A30104FE232604FE6F00800A232604FE95
:10162000232404FE6F004003B7670281138707205D
:10163000832784FEB307F70083C70700638807008A
:101640008327C4FE938717002326F4FE832784FE96
:10165000938717002324F4FE032784FE832784FD49
:10166000E344F7FC0327C4FE832784FD631AF704D1
:10167000232204FE6F000004B7670281138707204E
:10168000832744FEB307F70023800700B797028142
:10169000130710002384E72C13056004EFF0DFEF3D
:1016A000B79702812384072C832744FE9387170072
:1016B0002322F4FE032744FE832784FDE34EF7FA3A
:1016C000834734FEE39C07F46F00400213000000E0
:1016D000B797028183C7872C93C7170093F7F70F3B
:1016E000E39807FE13054006EFF01FEB1300000020
:1016F0008320C102032481021301010367800000DB
:10170000130101FF23268100130401019307000048
:101710001308000013850700930508000324C10087
:101720001301010167800000130101FE232E8100D7
:1017300013040102232604FE6F008004B7670281B0
:101740000327C4FE1317270093870722B307F70068
:101750001307300023A0E700B77702810327C4FEF8
:101760001317270093870722B307F70013072000FA
:1017700023A0E7008327C4FE938717002326F4FEE7
:101780000327C4FE9307F00FE3DAE7FA1300000023
:101790000324C1011301010267800000130101FD50
:1017A000232611022324810213040103232EA4FC07
:1017B000B707008113858711EFF08F80232604FE81
:1017C0006F0080058327C4FE638E07008327C4FE55
:1017D00093F7F70063980700B70700811385C713D5
:1017E000EFE01FFE8327C4FE939727000327C4FD65
:1017F000B307F70083A7070013850700EFF00F80FA
:10180000B707008113850714EFE09FFB8327C4FE11
:10181000938717002326F4FE0327C4FE9307F00FD7
:10182000E3D2E7FAB707008113854714EFE05FF9C9
:10183000130000008320C10203248102130101036D
:1018400067800000130101FF23261100232481007B
:1018500013040101EFF05FEDB767028113850722E2
:10186000EFF0DFF393070000138507008320C1002A
:0C187000032481001301010167800000C7
:02000004810079
:10000000300000003100000032000000330000002A
:10001000340000003500000036000000370000000A
:10002000380000003900000061000000620000009C
:10003000630000006400000065000000660000002E
:100040007761697420666F723A200000466F756EA2
:10005000643A20003000000031000000320000004F
:1000600033000000340000003500000036000000BE
:100070003700000038000000390000006100000077
:1000800062000000630000006400000065000000E2
:10009000660000000A00000030000000310000008F
:1000A0003200000033000000340000003500000082
:1000B0003600000037000000380000003900000062
:1000C00061000000620000006300000064000000A6
:1000D00065000000660000003000000031000000F4
:1000E0003200000033000000340000003500000042
:1000F0003600000037000000380000003900000022
:100100006100000062000000630000006400000065
:1001100065000000660000002D2D2D2D2D2D2D2DAC
:100120002D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2DFF
:100130002D2D2D2D2D2D2D0A000000000A00000070
:10014000200000000A2D2D2D2D2D2D2D2D2D2D2D96
:100150002D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2DCF
:060160002D2D2D2D0A00DB
:100168000000008104000081080000810C0000816B
:100178001000008114000081180000811C0000811B
:100188002000008124000081280000812C000081CB
:100198003000008134000081380000813C0000817B
:1001A80054000081580000815C00008160000081DB
:1001B80064000081680000816C000081700000818B
:1001C80074000081780000817C000081800000813B
:1001D80084000081880000818C00008190000081EB
:1001E800980000819C000081A0000081A40000818B
:1001F800A8000081AC000081B0000081B40000813B
:10020800B8000081BC000081C0000081C4000081EA
:10021800C8000081CC000081D0000081D40000819A
:10022800D8000081DC000081E0000081E40000814A
:10023800E8000081EC000081F0000081F4000081FA
:10024800F8000081FC0000810001008104010081A8
:10025800080100810C010081100100811401008156
:04026800060000008C
:040000058000000077
:00000001FF

Binary file not shown.

View file

@ -1,482 +0,0 @@
#include "vx_front.h"
#include "../vx_os/vx_back/vx_back.h"
// -------------------------- Matrix Multiplication --------------------------
static mat_mult_arg_t mat_mult_args;
void _vx_mat_mult(unsigned, unsigned);
void vx_sq_mat_mult(void * x, void * y, void * z, unsigned mat_dim)
{
mat_mult_args.x = x;
mat_mult_args.y = y;
mat_mult_args.z = z;
mat_mult_args.mat_dim = mat_dim;
unsigned num_avail_threads = vx_available_threads();
unsigned off = (mat_dim/num_avail_threads);
if ((mat_dim%num_avail_threads) != 0)
{
off += 1;
}
// vx_printf("Offset: ", off);
mat_mult_args.offset = off;
if (mat_dim >= num_avail_threads)
{
vx_spawnWarps(mat_dim, num_avail_threads, _vx_mat_mult, (void *) (&mat_mult_args));
}
else
{
vx_spawnWarps(mat_dim, mat_dim, _vx_mat_mult, (void *) (&mat_mult_args));
}
unsigned num_avail_warps = vx_available_warps();
if (mat_dim > num_avail_warps)
{
vx_wait_for_warps(num_avail_warps);
}
else
{
vx_wait_for_warps(mat_dim);
}
}
void _vx_mat_mult(unsigned tid, unsigned wid)
{
mat_mult_arg_t * args = (mat_mult_arg_t *) vx_get_arg_struct();
unsigned * x_ptr = args->x;
unsigned * y_ptr = args->y;
unsigned * z_ptr = args->z;
unsigned off = args->offset;
unsigned i_index = off * tid;
if (off == 0)
{
off = 1;
i_index = tid;
}
unsigned mat_dim = args->mat_dim;
for (int iter = 0; iter < off; ++iter)
{
unsigned total = 0;
for (unsigned place = 0; place < mat_dim; ++place)
{
unsigned x_i = (wid * mat_dim) + place;
unsigned y_i = (mat_dim * place ) + i_index;
total += (x_ptr[x_i] * y_ptr[y_i]);
}
int final_i = (wid * mat_dim) + i_index;
// unsigned cond = i_index < mat_dim;
// __if(cond)
// {
z_ptr[final_i] = total;
i_index++;
// }
// __else
// __end_if
}
// for (int z = 0; z < ((1000 * wid) + 1000); z++);
return;
}
static mat_r_arg_t mat_r_args;
// -------------------------- Matrix Addition --------------------------
void _vx_mat_add(unsigned, unsigned);
void vx_mat_add(void * x, void * y, void * z, unsigned num_rows, unsigned num_cols)
{
mat_r_args.x = x;
mat_r_args.y = y;
mat_r_args.z = z;
mat_r_args.num_cols = num_cols;
mat_r_args.num_rows = num_rows;
unsigned num_avail_threads = vx_available_threads();
unsigned off = (num_cols/num_avail_threads);
if ((num_cols%num_avail_threads) != 0)
{
off += 1;
}
mat_r_args.offset = off;
if (num_cols >= num_avail_threads)
{
vx_spawnWarps(num_rows, num_avail_threads, _vx_mat_add, (void *) (&mat_r_args));
}
else
{
vx_spawnWarps(num_rows, num_cols, _vx_mat_add, (void *) (&mat_r_args));
}
unsigned num_avail_warps = vx_available_warps();
if (num_rows > num_avail_warps)
{
vx_wait_for_warps(num_avail_warps);
}
else
{
vx_wait_for_warps(num_rows);
}
}
void _vx_mat_add(unsigned tid, unsigned wid)
{
// vx_print_str("*");
// for (int z = 0; z < ((wid * 1000) + 1000); z++);
mat_r_arg_t * args = (mat_r_arg_t *) vx_get_arg_struct();
unsigned * x_ptr = args->x;
unsigned * y_ptr = args->y;
unsigned * z_ptr = args->z;
unsigned off = args->offset;
unsigned i_index = off * tid;
if (off == 0)
{
off = 1;
i_index = tid;
}
unsigned num_cols = args->num_cols;
for (int iter = 0; iter < off; ++iter)
{
int final_i = (wid * num_cols) + i_index;
unsigned cond = i_index < num_cols;
__if(cond)
{
z_ptr[final_i] = x_ptr[final_i] + y_ptr[final_i];
i_index++;
}
__else
__end_if
}
return;
}
// -------------------------- Matrix Subtraction --------------------------
void _vx_mat_sub(unsigned, unsigned);
void vx_mat_sub(void * x, void * y, void * z, unsigned num_rows, unsigned num_cols)
{
mat_r_args.x = x;
mat_r_args.y = y;
mat_r_args.z = z;
mat_r_args.num_cols = num_cols;
mat_r_args.num_rows = num_rows;
unsigned num_avail_threads = vx_available_threads();
unsigned off = (num_cols/num_avail_threads);
if ((num_cols%num_avail_threads) != 0)
{
off += 1;
}
mat_r_args.offset = off;
if (num_cols >= num_avail_threads)
{
vx_spawnWarps(num_rows, num_avail_threads, _vx_mat_sub, (void *) (&mat_r_args));
}
else
{
vx_spawnWarps(num_rows, num_cols, _vx_mat_sub, (void *) (&mat_r_args));
}
unsigned num_avail_warps = vx_available_warps();
if (num_rows > num_avail_warps)
{
vx_wait_for_warps(num_avail_warps);
}
else
{
vx_wait_for_warps(num_rows);
}
}
void _vx_mat_sub(unsigned tid, unsigned wid)
{
// vx_print_str("*");
// for (int z = 0; z < ((wid * 1000) + 1000); z++);
mat_r_arg_t * args = (mat_r_arg_t *) vx_get_arg_struct();
unsigned * x_ptr = args->x;
unsigned * y_ptr = args->y;
unsigned * z_ptr = args->z;
unsigned off = args->offset;
unsigned i_index = off * tid;
if (off == 0)
{
off = 1;
i_index = tid;
}
unsigned num_cols = args->num_cols;
for (int iter = 0; iter < off; ++iter)
{
int final_i = (wid * num_cols) + i_index;
unsigned cond = i_index < num_cols;
__if(cond)
{
z_ptr[final_i] = x_ptr[final_i] - y_ptr[final_i];
i_index++;
}
__else
__end_if
}
return;
}
static mat_e_arg_t mat_e_args;
// --------------------------------------------------------------
void _vx_e_mat_add(unsigned, unsigned);
void vx_e_mat_add(void * x, void * scal, void * z, unsigned num_rows, unsigned num_cols)
{
mat_e_args.x = x;
mat_e_args.scal = scal;
mat_e_args.z = z;
mat_e_args.num_cols = num_cols;
mat_e_args.num_rows = num_rows;
unsigned num_avail_threads = vx_available_threads();
unsigned off = (num_cols/num_avail_threads);
if ((num_cols%num_avail_threads) != 0)
{
off += 1;
}
mat_e_args.offset = off;
if (num_cols >= num_avail_threads)
{
vx_spawnWarps(num_rows, num_avail_threads, _vx_e_mat_add, (void *) (&mat_e_args));
}
else
{
vx_spawnWarps(num_rows, num_cols, _vx_e_mat_add, (void *) (&mat_e_args));
}
unsigned num_avail_warps = vx_available_warps();
if (num_rows > num_avail_warps)
{
vx_wait_for_warps(num_avail_warps);
}
else
{
vx_wait_for_warps(num_rows);
}
}
void _vx_e_mat_add(unsigned tid, unsigned wid)
{
// vx_print_str("*");
// for (int z = 0; z < ((wid * 1000) + 1000); z++);
mat_e_arg_t * args = (mat_e_arg_t *) vx_get_arg_struct();
unsigned * x_ptr = args->x;
unsigned scal = *((unsigned *) args->scal);
unsigned * z_ptr = args->z;
unsigned off = args->offset;
unsigned i_index = off * tid;
if (off == 0)
{
off = 1;
i_index = tid;
}
unsigned num_cols = args->num_cols;
for (int iter = 0; iter < off; ++iter)
{
int final_i = (wid * num_cols) + i_index;
unsigned cond = i_index < num_cols;
__if(cond)
{
z_ptr[final_i] = x_ptr[final_i] + scal;
i_index++;
}
__else
__end_if
}
return;
}
void _vx_e_mat_mult(unsigned, unsigned);
void vx_e_mat_mult(void * x, void * scal, void * z, unsigned num_rows, unsigned num_cols)
{
mat_e_args.x = x;
mat_e_args.scal = scal;
mat_e_args.z = z;
mat_e_args.num_cols = num_cols;
mat_e_args.num_rows = num_rows;
unsigned num_avail_threads = vx_available_threads();
unsigned off = (num_cols/num_avail_threads);
if ((num_cols%num_avail_threads) != 0)
{
off += 1;
}
mat_e_args.offset = off;
if (num_cols >= num_avail_threads)
{
vx_spawnWarps(num_rows, num_avail_threads, _vx_e_mat_mult, (void *) (&mat_e_args));
}
else
{
vx_spawnWarps(num_rows, num_cols, _vx_e_mat_mult, (void *) (&mat_e_args));
}
unsigned num_avail_warps = vx_available_warps();
if (num_rows > num_avail_warps)
{
vx_wait_for_warps(num_avail_warps);
}
else
{
vx_wait_for_warps(num_rows);
}
}
void _vx_e_mat_mult(unsigned tid, unsigned wid)
{
// vx_print_str("*");
// for (int z = 0; z < ((wid * 1000) + 1000); z++);
mat_e_arg_t * args = (mat_e_arg_t *) vx_get_arg_struct();
unsigned * x_ptr = args->x;
unsigned scal = *((unsigned *) args->scal);
unsigned * z_ptr = args->z;
unsigned off = args->offset;
unsigned i_index = off * tid;
if (off == 0)
{
off = 1;
i_index = tid;
}
unsigned num_cols = args->num_cols;
for (int iter = 0; iter < off; ++iter)
{
int final_i = (wid * num_cols) + i_index;
unsigned cond = i_index < num_cols;
__if(cond)
{
z_ptr[final_i] = x_ptr[final_i] * scal;
i_index++;
}
__else
__end_if
}
return;
}
void sleep(int num)
{
for (int i = 0; i < num; i++);
}
bool barrier_bool = false;
bool barriers[32];
void barrier(unsigned wid, int num)
{
barriers[wid] = true;
if (wid == 0)
{
bool cont = false;
int count = 0;
while(cont)
{
count = 0;
for (int i = 0; i < num; i++)
{
if (barriers[i]) count++;
}
if (count == num)
{
for (int i = 0; i < num; i++)
{
barriers[i] = false;
barrier_bool = true;
sleep(70);
barrier_bool = false;
}
}
}
}
else
{
while(!barrier_bool);
sleep(100);
}
}

View file

@ -1,55 +0,0 @@
#include "../vx_os/vx_back/vx_back.h"
#include "../vx_os/vx_io/vx_io.h"
// -------------------------- Matrix Multiplication --------------------------
typedef struct
{
void * x;
void * y;
void * z;
unsigned mat_dim;
unsigned offset;
} mat_mult_arg_t;
void vx_sq_mat_mult(void *, void *, void *, unsigned);
// --------------------------------------------------------------------------
typedef struct
{
void * x;
void * y;
void * z;
unsigned num_cols;
unsigned num_rows;
unsigned offset;
} mat_r_arg_t;
// -------------------------- Matrix Addition -----------------------------
void vx_mat_add(void *, void *, void *, unsigned, unsigned);
// -------------------------- Matrix Subtraction --------------------------
void vx_mat_sub(void *, void *, void *, unsigned, unsigned);
// -----------------------------------------------------------------------
typedef struct
{
void * x;
void * scal;
void * z;
unsigned num_cols;
unsigned num_rows;
unsigned offset;
} mat_e_arg_t;
// -------------------------- Matrix element Addition ------------------
void vx_e_mat_add(void *, void *, void *, unsigned, unsigned);
// -------------------------- Matrix element Addition ------------------
void vx_e_mat_mult(void *, void *, void *, unsigned, unsigned);

View file

@ -1,40 +0,0 @@
#include "vx_mem.h"
void * vx_malloc_shared(unsigned size)
{
void * to_return;
bool done = false;
unsigned curr_size;
unsigned curr_index = 0;
while ((curr_index < free_index) && !done)
{
curr_size = (unsigned) *(free_array[curr_index].ptr - 4);
if (curr_size <= size)
{
to_return = free_array[curr_index].ptr;
done = true;
}
curr_index++;
}
unsigned * u_heap_ptr = (unsigned *) heap_ptr;
if (!done)
{
u_heap_ptr[0] = size;
to_return = heap_ptr + 4;
heap_ptr = to_return + size;
}
return to_return;
}
void vx_free(void * to_free)
{
}

View file

@ -1,15 +0,0 @@
void * vx_malloc_shared(unsigned);
void vx_free(void *);
typedef struct
{
void * ptr;
} free_t;
void * heap_ptr = (void *) 0xFF000000;
free_t free_array[100];
unsigned free_index = 0;

View file

@ -1,83 +0,0 @@
#include "./vx_include/vx_front.h"
unsigned x[1024] = {0};
unsigned y[1024] = {0};
unsigned z[1024] = {0};
unsigned temp = 6;
#define MAT_DIM 16
#define NUM_COLS 16
#define NUM_ROWS 16
double sc_time_stamp()
{
return 0;
}
void initialize_mats()
{
for (int i = 0; i < (MAT_DIM * MAT_DIM); i++)
{
x[i] = 3;
y[i] = 2;
}
}
void print_matrix(unsigned * z)
{
vx_print_str("-------------------------------\n");
for (int j = 0; j < (MAT_DIM * MAT_DIM); j++)
{
if (j!=0) if ((j % MAT_DIM) == 0) vx_print_str("\n");
vx_print_hex(z[j]);
vx_print_str(" ");
}
vx_print_str("\n-------------------------------\n");
}
int main()
{
// unsigned f = temp;
// vx_print_hex(11);
// vx_printc(0, 'k');
initialize_mats();
// matrix multiplication
// vx_sq_mat_mult(x, y, z, MAT_DIM);
// vx_print_str("\n\nMatrix multiplication\n");
// print_matrix(z);
print_matrix(x);
// // matrix addition
// vx_mat_add(x, y, z, NUM_ROWS, NUM_COLS);
// vx_print_str("\n\nMatrix Addition\n");
// print_matrix(z);
// // matrix sub
// vx_mat_sub(x, y, z, NUM_ROWS, NUM_COLS);
// vx_print_str("\n\nMatrix Subtraction\n");
// print_matrix(z);
// unsigned scal = 3;
// // matrix element add
vx_e_mat_add(z, &scal, z, NUM_ROWS, NUM_COLS);
// vx_print_str("\n\nMatrix Element Addition\n");
// print_matrix(z);
// // matrix element add
// vx_e_mat_mult(z, &scal, z, NUM_ROWS, NUM_COLS);
// vx_print_str("\n\nMatrix Element Addition\n");
// print_matrix(z);
return 0;
}

BIN
kernel/vx_os/.DS_Store vendored

Binary file not shown.

View file

@ -1,153 +0,0 @@
#include "vx_back.h"
#include "../vx_io/vx_io.h"
void vx_before_main()
{
// unsigned num_available_warps = vx_available_warps();
for (int i = 0; i < 32; i++)
{
queue_initialize(q + i);
}
}
void vx_reschedule_warps()
{
register unsigned curr_warp asm("s10");
// vx_printf("Reschedule: ", curr_warp);
asm __volatile__("nop");
if (queue_isEmpty(q+curr_warp))
{
// vx_printf("Done: ", curr_warp);
done[curr_warp] = 1;
if (curr_warp == 0)
{
vx_load_context();
return;
}
ECALL;
}
Job j;
queue_dequeue(q+curr_warp,&j);
// vx_printf("Reschedule -> ", j.wid);
asm __volatile__("mv sp,%0"::"r" (j.base_sp):);
vx_createThreads(j.n_threads, j.wid, j.func_ptr, j.args, j.assigned_warp);
ECALL; // should never reach this
}
void vx_schedule_warps()
{
unsigned num_available_warps = vx_available_warps();
asm __volatile__("mv s3, sp");
for (int curr_warp = 1; curr_warp < num_available_warps; ++curr_warp)
{
if (!queue_isEmpty(q+curr_warp))
{
Job j;
queue_dequeue(q+curr_warp,&j);
asm __volatile__("mv sp,%0"::"r" (j.base_sp):);
vx_wspawn(j.n_threads, j.wid, j.func_ptr, j.args, j.assigned_warp);
}
}
asm __volatile__("mv sp, s3");
vx_save_context();
// vx_print_str("saved context\n");
register unsigned val asm("tp");
if (val)
{
if (!queue_isEmpty(q))
{
// vx_print_str("found something for w0\n");
Job j;
queue_dequeue(q,&j);
// vx_printf("num_threads: ", j.n_threads);
asm __volatile__("mv sp,%0"::"r" (j.base_sp):);
vx_createThreads(j.n_threads, j.wid, j.func_ptr, j.args, j.assigned_warp);
}
}
}
void vx_spawnWarps(unsigned num_Warps, unsigned num_threads, FUNC, void * args)
{
vx_before_main();
unsigned num_available_warps = vx_available_warps();
// vx_printf("Num available warps: ", num_available_warps);
asm __volatile__("addi s2, sp, 0");
int warp = 0;
for (unsigned i = 0; i < num_Warps; i++)
{
asm __volatile__("lui s3, 0xFFFF0");
asm __volatile__("add sp, sp, s3");
register unsigned stack_ptr asm("sp");
Job j;
j.wid = i;
j.n_threads = num_threads;
j.base_sp = stack_ptr;
j.func_ptr = (unsigned) func;
j.args = args;
j.assigned_warp = warp;
queue_enqueue(q + warp,&j);
++warp;
if (warp >= num_available_warps) warp = 0;
}
asm __volatile__("addi sp, s2, 0");
vx_schedule_warps();
}
void vx_wait_for_warps(unsigned num_wait)
{
vx_printf("wait for: ", num_wait);
unsigned num_available_warps = vx_available_warps();
unsigned num = 0;
while (num < num_wait)
{
// change num=1 if running on RTL
// Change num=0 if running on emulator
num = 1;
for (int i = 0; i < 32; i++)
{
if (done[i] == 1)
{
num += 1;
}
}
vx_printf("Found: ", num);
}
// vx_printf("num found: ", num);
for (int i = 0; i < num_available_warps; i++) done[i] = 0;
}
void * vx_get_arg_struct(void)
{
register void *ret asm("s7");
return ret;
}

View file

@ -1,55 +0,0 @@
#pragma once
#include <stdbool.h>
#include "../vx_util/queue.h"
#define WSPAWN asm __volatile__(".word 0x3006b"::);
#define CLONE asm __volatile__(".word 0x3506b":::);
#define JALRS asm __volatile__(".word 0x1bfe0eb":::"s10");
#define ECALL asm __volatile__(".word 0x00000073");
#define JMPRT asm __volatile__(".word 0x5406b");
#define SPLIT asm __volatile__(".word 0xf206b");
#define P_JUMP asm __volatile__(".word 0x1ff707b");
#define JOIN asm __volatile__(".word 0x306b");
#define __if(val) bool temp = !val; \
register unsigned p asm("t5") = temp; \
register void * e asm("t6") = &&ELSE; \
SPLIT; \
P_JUMP; \
#define __else register void * w asm("t3") = &&AFTER; \
asm __volatile__("jr t3"); \
ELSE: asm __volatile__("nop");
#define __end_if AFTER:\
JOIN;
static int done[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
static int main_sp[1];
unsigned context[64];
void vx_save_context(void);
void vx_load_context(void);
#define FUNC void (func)(unsigned, unsigned)
unsigned vx_available_warps(void);
unsigned vx_available_threads(void);
void vx_createThreads(unsigned, unsigned, unsigned, void *, unsigned);
void vx_wspawn(unsigned, unsigned, unsigned, void *, unsigned);
void vx_spawnWarps(unsigned num_Warps, unsigned num_threads, FUNC, void *);
void vx_schedule_warps(void);
void vx_reschedule_warps(void);
void vx_wait_for_warps(unsigned);
void * vx_get_arg_struct(void);

View file

@ -1,232 +0,0 @@
.section .text
.type _start, @function
.global _start
_start:
# li a1, 4
# add a2, a1, a1
# li a0, 0
# .word 0x0005006b # tmc a0
###########################
# la a0, 0x10000000
# li a1, 7
# sw a1, 0(a0)
# la a0, 0x10000048
# li a1, 3
# sw a1, 0(a0)
# la a0, 0x80000000
# li a1, 9
# sw a1, 0(a0)
# la a0, 0x80000008
# li a1, 8
# sw a1, 0(a0)
# la a0, 0x10000000
# lw a2, 0(a0)
# la a0, 0x10000048
# lw a3, 0(a0)
# li a0, 0
# .word 0x0005006b # tmc a0
########################################
# li a0, 4
# la a1, SPAWN
# .word 0x00b5106b # wspawn a0(numWarps), a1(PC SPAWN)
# j SPAWN
# nop
# nop
# nop
# nop
# nop
# nop
# nop
# nop
# SPAWN:
# li a2, 7
# li a0, 0
# li a1, 4
# .word 0x00b5406b # barrier a0(barrier id), a1(numWarps)
# .word 0x0005006b # tmc a0
##########################
# li a0, 4
# .word 0x0005006b # tmc a0
#
# # csrr a2, 0x21 # read warp IDs
# slti a0, a1, 2
# .word 0x0005206b # split a0
# beq a0, zero, ELSE
# li a2, 5
# j DONE
# ELSE:
# li a2, 7
# DONE:
# .word 0x0000306b #join
# ecall
############################
lui sp, 0x7ffff
# jal vx_before_main
jal main
li a0, 0
.word 0x0005006b # tmc a0
# Hi:
# li a2, 7
# ret
.type vx_createThreads, @function
.global vx_createThreads
vx_createThreads:
mv s7 ,a3 # Moving args to s7
mv s10,a4 # Moving assigned_warp to s10
mv t5 ,sp # Saving the current stack pointer to t5
mv t2 , a0 # t2 = num_threads
loop_init:
li a0,1 # i = 0
loop_cond:
bge a0, t2, loop_done # i < num_threads
loop_body:
addi sp,sp,-2048 # Allocate 2k stack for new thread
mv t1, a0 # #lane = i
.word 0x3506b # clone register state
loop_inc:
addi a0, a0, 1
j loop_cond
loop_done:
nop
nop
nop
nop
nop
nop
mv sp,t5 # Restoring the stack
li a0,0 # setting tid = 0 for main thread
mv t6,a2 # setting func_addr
mv s11,t2 # setting num_threads to spawn
nop
nop
nop
nop
nop
nop
nop
nop
.word 0x1bfe0eb
nop
nop
nop
nop
nop
nop
la a0, vx_reschedule_warps
.word 0x5406b
.type vx_wspawn, @function
.global vx_wspawn
vx_wspawn:
la t1, vx_createThreads
.word 0x3006b # WSPAWN instruction
ret
.global context
.type vx_save_context, @function
.global vx_save_context
vx_save_context:
la tp, context
sw x0 , 0 (tp)
sw x1 , 4 (tp)
sw x2 , 8 (tp)
sw x3 , 12(tp)
sw x4 , 16(tp)
sw x5 , 20(tp)
sw x6 , 24(tp)
sw x7 , 28(tp)
sw x8 , 32(tp)
sw x9 , 36(tp)
sw x10, 40(tp)
sw x11, 44(tp)
sw x12, 48(tp)
sw x13, 52(tp)
sw x14, 56(tp)
sw x15, 60(tp)
sw x16, 64(tp)
sw x17, 68(tp)
sw x18, 72(tp)
sw x19, 76(tp)
sw x20, 80(tp)
sw x21, 84(tp)
sw x22, 88(tp)
sw x23, 92(tp)
sw x24, 96(tp)
sw x25, 100(tp)
sw x26, 104(tp)
sw x27, 108(tp)
sw x28, 112(tp)
sw x29, 116(tp)
sw x30, 120(tp)
sw x31, 124(tp)
li tp, 1
ret
.type vx_load_context, @function
.global vx_load_context
vx_load_context:
la tp, context
lw x0 , 0 (tp)
lw x1 , 4 (tp)
lw x2 , 8 (tp)
lw x3 , 12(tp)
lw x4 , 16(tp)
lw x5 , 20(tp)
lw x6 , 24(tp)
lw x7 , 28(tp)
lw x8 , 32(tp)
lw x9 , 36(tp)
lw x10, 40(tp)
lw x11, 44(tp)
lw x12, 48(tp)
lw x13, 52(tp)
lw x14, 56(tp)
lw x15, 60(tp)
lw x16, 64(tp)
lw x17, 68(tp)
lw x18, 72(tp)
lw x19, 76(tp)
lw x20, 80(tp)
lw x21, 84(tp)
lw x22, 88(tp)
lw x23, 92(tp)
lw x24, 96(tp)
lw x25, 100(tp)
lw x26, 104(tp)
lw x27, 108(tp)
lw x28, 112(tp)
lw x29, 116(tp)
lw x30, 120(tp)
lw x31, 124(tp)
li tp, 0
ret
.type vx_available_warps, @function
.global vx_available_warps
vx_available_warps:
csrr a0, 0x20
ret
.type vx_available_threads, @function
.global vx_available_threads
vx_available_threads:
csrr a0, 0x21
ret

Binary file not shown.

View file

@ -1,15 +0,0 @@
#include "vx_io.h"
void vx_print_hex(unsigned f)
{
vx_print_str(hextoa[f]);
}
void vx_printf(char * c, unsigned f)
{
vx_print_str(c);
vx_print_hex(f);
vx_print_str("\n");
}

View file

@ -1,9 +0,0 @@
#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);

View file

@ -1,30 +0,0 @@
.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 a7, 0x00010000
sw a1, 0(a7)
ret

Binary file not shown.

View file

@ -1,49 +0,0 @@
#ifndef __QUEUE__
#define __QUEUE__
#define SIZE 100
#define WARPS 8
typedef struct Job_t
{
unsigned wid;
unsigned n_threads;
unsigned base_sp;
unsigned func_ptr;
void * args;
unsigned assigned_warp;
} Job;
typedef struct Queue_t
{
unsigned start_i;
unsigned end_i;
unsigned num_j;
unsigned total_warps;
unsigned active_warps;
struct Job_t jobs[SIZE];
} Queue;
Queue q[64];
void queue_initialize(Queue *);
void queue_enqueue(Queue *, Job *);
void queue_dequeue(Queue *, Job *);
int queue_isFull(Queue *);
int queue_isEmpty(Queue *);
int queue_availableWarps(Queue *);
void func();
#endif

View file

@ -1,129 +0,0 @@
.equ A_WARPS, 7
.equ SIZE, 50
.section .text
.type queue_initialize, @function
.global queue_initialize
queue_initialize:
mv t0, a0 # loading base address of q
li t1, 0 # to initialize variables
li t2, A_WARPS # Num of available warps
sw t1, 0 (t0) # start_i
sw t1, 4 (t0) # end_i
sw t1, 8 (t0) # num_j
sw t2, 12(t0) # total_warps
sw t1, 16(t0) # active_warps
ret
.type queue_enqueue, @function
.global queue_enqueue
queue_enqueue:
mv t0, a0 # loding base address of q
lw t1, 8 (t0) # t1 = num_j
addi t1, t1, 1 # ++t1
sw t1, 8 (t0) # num_j = t1
addi t1, t0, 20 # t1 = jobs_addr
lw t4, 4 (t0) # t4 = end_i
slli t2, t4, 5 # index * 32 [log(sizeof(job))]
add t1, t1, t2 # jobs + index
lw t3, 0 (a1) # wid
sw t3, 0 (t1) #
lw t3, 4 (a1) # n_threads
sw t3, 4 (t1) #
lw t3, 8 (a1) # base_sp
sw t3, 8 (t1) #
lw t3, 12(a1) # func_ptr
sw t3, 12(t1) #
lw t3, 16(a1) # args
sw t3, 16(t1) #
lw t3, 20(a1) # assigned_warp
sw t3, 20(t1) #
addi t4, t4, 1 # end_i++
li t5, SIZE # size
bne t4, t5, ec # if ((q.end_i + 1) == SIZE)
mv t4, zero
ec:
sw t4, 4 (t0) # end_i
ret
.type queue_dequeue, @function
.global queue_dequeue
queue_dequeue:
mv t0, a0 # loading base address of q
lw t1, 8 (t0) # t1 = num_j
nop
nop
nop
nop
nop
nop
addi t1, t1, -1 # --t1
sw t1, 8 (t0) # num_j = t1
addi t1, t0, 20 # t1 = jobs_addr
lw t4, 0 (t0) # t4 = start_i
li t6, SIZE # size
mv t5, t4 # t5 = start_i
addi t5, t5, 1 # t5++
bne t5, t6, dc # if ((q.start_i + 1) == SIZE)
mv t5, zero
dc:
sw t5, 0(t0) # storing start_i
slli t2, t4, 5 # index * 32 [log(sizeof(job))]
add t1, t1, t2 # jobs + index
lw t3, 0 (t1) # wid
sw t3, 0 (a1) #
lw t3, 4 (t1) # n_threads
sw t3, 4 (a1) #
lw t3, 8 (t1) # base_sp
sw t3, 8 (a1) #
lw t3, 12(t1) # func_ptr
sw t3, 12(a1) #
lw t3, 16(t1) # args
sw t3, 16(a1) #
lw t3, 20(t1) # assigned_warp
sw t3, 20(a1) #
ret
.type queue_isFull, @function
.global queue_isFull
queue_isFull:
mv t0, a0 # loading base address of q
lw t1, 8 (t0) # t1 = num_j
mv a0, zero # ret_val = 0
li t3, SIZE # t3 = SIZE
bne t3, t1, qf # if (num_j == 1)
addi a0, a0, 1 # ret_val = 1;
qf:
ret
.type queue_isEmpty, @function
.global queue_isEmpty
queue_isEmpty:
mv t0, a0 # loading base address of q
lw t1, 8 (t0) # t1 = num_j
mv a0, zero # ret_val = 0
mv t3, zero # t3 = 0
bne t3, t1, qe # if (num_j == 0)
addi a0, a0, 1 # ret_val = 1;
qe:
ret
.type queue_availableWarps, @function
.global queue_availableWarps
queue_availableWarps:
mv t0, a0 # loading base address of q
lw t1, 12(t0) # t1 = total_warps
lw t2, 16(t0) # t2 = active_warps
sltu a0, t2, t1
ret

View file

@ -1,26 +0,0 @@
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_API = ./vx_api/vx_api.c
VX_TEST = ./tests/tests.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_API) $(VX_TEST) $(VX_MAIN) -o vortex_runtime.elf

View file

@ -1,48 +0,0 @@
/* ---- 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

@ -1,856 +0,0 @@
vortex_runtime.elf: file format elf32-littleriscv
Disassembly of section .text:
80000000 <_start>:
80000000: 00000597 auipc a1,0x0
80000004: 02058593 addi a1,a1,32 # 80000020 <vx_set_sp>
80000008: 00400513 li a0,4
8000000c: 00b5106b 0xb5106b
80000010: 010000ef jal ra,80000020 <vx_set_sp>
80000014: 748000ef jal ra,8000075c <main>
80000018: 00000513 li a0,0
8000001c: 0005006b 0x5006b
80000020 <vx_set_sp>:
80000020: 00400513 li a0,4
80000024: 0005006b 0x5006b
80000028: 021026f3 csrr a3,0x21
8000002c: 01a69693 slli a3,a3,0x1a
80000030: 02002673 csrr a2,0x20
80000034: 00a61593 slli a1,a2,0xa
80000038: 00261613 slli a2,a2,0x2
8000003c: 6ffff137 lui sp,0x6ffff
80000040: 40b10133 sub sp,sp,a1
80000044: 40d10133 sub sp,sp,a3
80000048: 00c10133 add sp,sp,a2
8000004c: 021026f3 csrr a3,0x21
80000050: 00068663 beqz a3,8000005c <RETURN>
80000054: 00000513 li a0,0
80000058: 0005006b 0x5006b
8000005c <RETURN>:
8000005c: 00008067 ret
80000060 <vx_wspawn>:
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: 00008067 ret
80000080 <vx_join>:
80000080: 0000306b 0x306b
80000084: 00008067 ret
80000088 <vx_warpID>:
80000088: 02102573 csrr a0,0x21
8000008c: 00008067 ret
80000090 <vx_threadID>:
80000090: 02002573 csrr a0,0x20
80000094: 00008067 ret
80000098 <vx_resetStack>:
80000098: 00400513 li a0,4
8000009c: 0005006b 0x5006b
800000a0: 021026f3 csrr a3,0x21
800000a4: 00f69693 slli a3,a3,0xf
800000a8: 02002673 csrr a2,0x20
800000ac: 00a61593 slli a1,a2,0xa
800000b0: 00261613 slli a2,a2,0x2
800000b4: 6ffff137 lui sp,0x6ffff
800000b8: 40b10133 sub sp,sp,a1
800000bc: 40d10133 sub sp,sp,a3
800000c0: 00c10133 add sp,sp,a2
800000c4: 021026f3 csrr a3,0x21
800000c8: 00068663 beqz a3,800000d4 <RETURN>
800000cc: 00000513 li a0,0
800000d0: 0005006b 0x5006b
800000d4 <RETURN>:
800000d4: 00008067 ret
800000d8 <vx_print_str>:
800000d8: ff410113 addi sp,sp,-12 # 6fffeff4 <_start-0x1000100c>
800000dc: 00112023 sw ra,0(sp)
800000e0: 00b12223 sw a1,4(sp)
800000e4 <bl>:
800000e4: 00054583 lbu a1,0(a0)
800000e8: 00058863 beqz a1,800000f8 <be>
800000ec: 01c000ef jal ra,80000108 <vx_printc>
800000f0: 00150513 addi a0,a0,1
800000f4: ff1ff06f j 800000e4 <bl>
800000f8 <be>:
800000f8: 00012083 lw ra,0(sp)
800000fc: 00412583 lw a1,4(sp)
80000100: 00c10113 addi sp,sp,12
80000104: 00008067 ret
80000108 <vx_printc>:
80000108: 000102b7 lui t0,0x10
8000010c: 00b2a023 sw a1,0(t0) # 10000 <_start-0x7fff0000>
80000110: 00008067 ret
80000114 <vx_print_hex>:
80000114: fe010113 addi sp,sp,-32
80000118: 00112e23 sw ra,28(sp)
8000011c: 00812c23 sw s0,24(sp)
80000120: 02010413 addi s0,sp,32
80000124: fea42623 sw a0,-20(s0)
80000128: 810007b7 lui a5,0x81000
8000012c: fec42703 lw a4,-20(s0)
80000130: 00271713 slli a4,a4,0x2
80000134: 0f478793 addi a5,a5,244 # 810000f4 <z+0xfffffe94>
80000138: 00f707b3 add a5,a4,a5
8000013c: 0007a783 lw a5,0(a5)
80000140: 00078513 mv a0,a5
80000144: f95ff0ef jal ra,800000d8 <vx_print_str>
80000148: 00000013 nop
8000014c: 01c12083 lw ra,28(sp)
80000150: 01812403 lw s0,24(sp)
80000154: 02010113 addi sp,sp,32
80000158: 00008067 ret
8000015c <vx_printf>:
8000015c: fe010113 addi sp,sp,-32
80000160: 00112e23 sw ra,28(sp)
80000164: 00812c23 sw s0,24(sp)
80000168: 02010413 addi s0,sp,32
8000016c: fea42623 sw a0,-20(s0)
80000170: feb42423 sw a1,-24(s0)
80000174: fec42503 lw a0,-20(s0)
80000178: f61ff0ef jal ra,800000d8 <vx_print_str>
8000017c: fe842503 lw a0,-24(s0)
80000180: f95ff0ef jal ra,80000114 <vx_print_hex>
80000184: 810007b7 lui a5,0x81000
80000188: 04078513 addi a0,a5,64 # 81000040 <z+0xfffffde0>
8000018c: f4dff0ef jal ra,800000d8 <vx_print_str>
80000190: 00000013 nop
80000194: 01c12083 lw ra,28(sp)
80000198: 01812403 lw s0,24(sp)
8000019c: 02010113 addi sp,sp,32
800001a0: 00008067 ret
800001a4 <setup_call>:
800001a4: fe010113 addi sp,sp,-32
800001a8: 00112e23 sw ra,28(sp)
800001ac: 00812c23 sw s0,24(sp)
800001b0: 02010413 addi s0,sp,32
800001b4: 810007b7 lui a5,0x81000
800001b8: 23c7a783 lw a5,572(a5) # 8100023c <z+0xffffffdc>
800001bc: 00078513 mv a0,a5
800001c0: ea9ff0ef jal ra,80000068 <vx_tmc>
800001c4: 810007b7 lui a5,0x81000
800001c8: 2387a703 lw a4,568(a5) # 81000238 <z+0xffffffd8>
800001cc: 810007b7 lui a5,0x81000
800001d0: 2347a783 lw a5,564(a5) # 81000234 <z+0xffffffd4>
800001d4: 00078513 mv a0,a5
800001d8: 000700e7 jalr a4
800001dc: eadff0ef jal ra,80000088 <vx_warpID>
800001e0: fea42623 sw a0,-20(s0)
800001e4: fec42783 lw a5,-20(s0)
800001e8: 00078863 beqz a5,800001f8 <setup_call+0x54>
800001ec: 00000513 li a0,0
800001f0: e79ff0ef jal ra,80000068 <vx_tmc>
800001f4: 00c0006f j 80000200 <setup_call+0x5c>
800001f8: 00100513 li a0,1
800001fc: e6dff0ef jal ra,80000068 <vx_tmc>
80000200: 00000013 nop
80000204: 01c12083 lw ra,28(sp)
80000208: 01812403 lw s0,24(sp)
8000020c: 02010113 addi sp,sp,32
80000210: 00008067 ret
80000214 <vx_spawnWarps>:
80000214: fe010113 addi sp,sp,-32
80000218: 00112e23 sw ra,28(sp)
8000021c: 00812c23 sw s0,24(sp)
80000220: 02010413 addi s0,sp,32
80000224: fea42623 sw a0,-20(s0)
80000228: feb42423 sw a1,-24(s0)
8000022c: fec42223 sw a2,-28(s0)
80000230: fed42023 sw a3,-32(s0)
80000234: 810007b7 lui a5,0x81000
80000238: fe442703 lw a4,-28(s0)
8000023c: 22e7ac23 sw a4,568(a5) # 81000238 <z+0xffffffd8>
80000240: 810007b7 lui a5,0x81000
80000244: fe042703 lw a4,-32(s0)
80000248: 22e7aa23 sw a4,564(a5) # 81000234 <z+0xffffffd4>
8000024c: 810007b7 lui a5,0x81000
80000250: fe842703 lw a4,-24(s0)
80000254: 22e7ae23 sw a4,572(a5) # 8100023c <z+0xffffffdc>
80000258: 800007b7 lui a5,0x80000
8000025c: 1a478793 addi a5,a5,420 # 800001a4 <z+0xfeffff44>
80000260: 00078593 mv a1,a5
80000264: fec42503 lw a0,-20(s0)
80000268: df9ff0ef jal ra,80000060 <vx_wspawn>
8000026c: f39ff0ef jal ra,800001a4 <setup_call>
80000270: 00000013 nop
80000274: 01c12083 lw ra,28(sp)
80000278: 01812403 lw s0,24(sp)
8000027c: 02010113 addi sp,sp,32
80000280: 00008067 ret
80000284 <test_tmc>:
80000284: fe010113 addi sp,sp,-32
80000288: 00112e23 sw ra,28(sp)
8000028c: 00812c23 sw s0,24(sp)
80000290: 02010413 addi s0,sp,32
80000294: 810007b7 lui a5,0x81000
80000298: 08478513 addi a0,a5,132 # 81000084 <z+0xfffffe24>
8000029c: e3dff0ef jal ra,800000d8 <vx_print_str>
800002a0: 00400513 li a0,4
800002a4: dc5ff0ef jal ra,80000068 <vx_tmc>
800002a8: de9ff0ef jal ra,80000090 <vx_threadID>
800002ac: fea42623 sw a0,-20(s0)
800002b0: fec42703 lw a4,-20(s0)
800002b4: 810007b7 lui a5,0x81000
800002b8: fec42683 lw a3,-20(s0)
800002bc: 00269693 slli a3,a3,0x2
800002c0: 24078793 addi a5,a5,576 # 81000240 <z+0xffffffe0>
800002c4: 00f687b3 add a5,a3,a5
800002c8: 00e7a023 sw a4,0(a5)
800002cc: 00100513 li a0,1
800002d0: d99ff0ef jal ra,80000068 <vx_tmc>
800002d4: 810007b7 lui a5,0x81000
800002d8: 2407a783 lw a5,576(a5) # 81000240 <z+0xffffffe0>
800002dc: 00078513 mv a0,a5
800002e0: e35ff0ef jal ra,80000114 <vx_print_hex>
800002e4: 810007b7 lui a5,0x81000
800002e8: 09078513 addi a0,a5,144 # 81000090 <z+0xfffffe30>
800002ec: dedff0ef jal ra,800000d8 <vx_print_str>
800002f0: 810007b7 lui a5,0x81000
800002f4: 24078793 addi a5,a5,576 # 81000240 <z+0xffffffe0>
800002f8: 0047a783 lw a5,4(a5)
800002fc: 00078513 mv a0,a5
80000300: e15ff0ef jal ra,80000114 <vx_print_hex>
80000304: 810007b7 lui a5,0x81000
80000308: 09078513 addi a0,a5,144 # 81000090 <z+0xfffffe30>
8000030c: dcdff0ef jal ra,800000d8 <vx_print_str>
80000310: 810007b7 lui a5,0x81000
80000314: 24078793 addi a5,a5,576 # 81000240 <z+0xffffffe0>
80000318: 0087a783 lw a5,8(a5)
8000031c: 00078513 mv a0,a5
80000320: df5ff0ef jal ra,80000114 <vx_print_hex>
80000324: 810007b7 lui a5,0x81000
80000328: 09078513 addi a0,a5,144 # 81000090 <z+0xfffffe30>
8000032c: dadff0ef jal ra,800000d8 <vx_print_str>
80000330: 810007b7 lui a5,0x81000
80000334: 24078793 addi a5,a5,576 # 81000240 <z+0xffffffe0>
80000338: 00c7a783 lw a5,12(a5)
8000033c: 00078513 mv a0,a5
80000340: dd5ff0ef jal ra,80000114 <vx_print_hex>
80000344: 810007b7 lui a5,0x81000
80000348: 09078513 addi a0,a5,144 # 81000090 <z+0xfffffe30>
8000034c: d8dff0ef jal ra,800000d8 <vx_print_str>
80000350: 00000013 nop
80000354: 01c12083 lw ra,28(sp)
80000358: 01812403 lw s0,24(sp)
8000035c: 02010113 addi sp,sp,32
80000360: 00008067 ret
80000364 <test_divergence>:
80000364: fe010113 addi sp,sp,-32
80000368: 00112e23 sw ra,28(sp)
8000036c: 00812c23 sw s0,24(sp)
80000370: 02010413 addi s0,sp,32
80000374: d1dff0ef jal ra,80000090 <vx_threadID>
80000378: fea42623 sw a0,-20(s0)
8000037c: fec42783 lw a5,-20(s0)
80000380: 0027b793 sltiu a5,a5,2
80000384: fef405a3 sb a5,-21(s0)
80000388: feb44783 lbu a5,-21(s0)
8000038c: 00078513 mv a0,a5
80000390: ce9ff0ef jal ra,80000078 <vx_split>
80000394: feb44783 lbu a5,-21(s0)
80000398: 06078463 beqz a5,80000400 <test_divergence+0x9c>
8000039c: fec42783 lw a5,-20(s0)
800003a0: 0017b793 seqz a5,a5
800003a4: fef40523 sb a5,-22(s0)
800003a8: fea44783 lbu a5,-22(s0)
800003ac: 00078513 mv a0,a5
800003b0: cc9ff0ef jal ra,80000078 <vx_split>
800003b4: fea44783 lbu a5,-22(s0)
800003b8: 02078263 beqz a5,800003dc <test_divergence+0x78>
800003bc: 810007b7 lui a5,0x81000
800003c0: fec42703 lw a4,-20(s0)
800003c4: 00271713 slli a4,a4,0x2
800003c8: 24078793 addi a5,a5,576 # 81000240 <z+0xffffffe0>
800003cc: 00f707b3 add a5,a4,a5
800003d0: 00a00713 li a4,10
800003d4: 00e7a023 sw a4,0(a5)
800003d8: 0200006f j 800003f8 <test_divergence+0x94>
800003dc: 810007b7 lui a5,0x81000
800003e0: fec42703 lw a4,-20(s0)
800003e4: 00271713 slli a4,a4,0x2
800003e8: 24078793 addi a5,a5,576 # 81000240 <z+0xffffffe0>
800003ec: 00f707b3 add a5,a4,a5
800003f0: 00b00713 li a4,11
800003f4: 00e7a023 sw a4,0(a5)
800003f8: c89ff0ef jal ra,80000080 <vx_join>
800003fc: 0640006f j 80000460 <test_divergence+0xfc>
80000400: fec42783 lw a5,-20(s0)
80000404: 0037b793 sltiu a5,a5,3
80000408: fef404a3 sb a5,-23(s0)
8000040c: fe944783 lbu a5,-23(s0)
80000410: 00078513 mv a0,a5
80000414: c65ff0ef jal ra,80000078 <vx_split>
80000418: fe944783 lbu a5,-23(s0)
8000041c: 02078263 beqz a5,80000440 <test_divergence+0xdc>
80000420: 810007b7 lui a5,0x81000
80000424: fec42703 lw a4,-20(s0)
80000428: 00271713 slli a4,a4,0x2
8000042c: 24078793 addi a5,a5,576 # 81000240 <z+0xffffffe0>
80000430: 00f707b3 add a5,a4,a5
80000434: 00c00713 li a4,12
80000438: 00e7a023 sw a4,0(a5)
8000043c: 0200006f j 8000045c <test_divergence+0xf8>
80000440: 810007b7 lui a5,0x81000
80000444: fec42703 lw a4,-20(s0)
80000448: 00271713 slli a4,a4,0x2
8000044c: 24078793 addi a5,a5,576 # 81000240 <z+0xffffffe0>
80000450: 00f707b3 add a5,a4,a5
80000454: 00d00713 li a4,13
80000458: 00e7a023 sw a4,0(a5)
8000045c: c25ff0ef jal ra,80000080 <vx_join>
80000460: c21ff0ef jal ra,80000080 <vx_join>
80000464: 810007b7 lui a5,0x81000
80000468: 2407a783 lw a5,576(a5) # 81000240 <z+0xffffffe0>
8000046c: 00078513 mv a0,a5
80000470: ca5ff0ef jal ra,80000114 <vx_print_hex>
80000474: 810007b7 lui a5,0x81000
80000478: 09078513 addi a0,a5,144 # 81000090 <z+0xfffffe30>
8000047c: c5dff0ef jal ra,800000d8 <vx_print_str>
80000480: 810007b7 lui a5,0x81000
80000484: 24078793 addi a5,a5,576 # 81000240 <z+0xffffffe0>
80000488: 0047a783 lw a5,4(a5)
8000048c: 00078513 mv a0,a5
80000490: c85ff0ef jal ra,80000114 <vx_print_hex>
80000494: 810007b7 lui a5,0x81000
80000498: 09078513 addi a0,a5,144 # 81000090 <z+0xfffffe30>
8000049c: c3dff0ef jal ra,800000d8 <vx_print_str>
800004a0: 810007b7 lui a5,0x81000
800004a4: 24078793 addi a5,a5,576 # 81000240 <z+0xffffffe0>
800004a8: 0087a783 lw a5,8(a5)
800004ac: 00078513 mv a0,a5
800004b0: c65ff0ef jal ra,80000114 <vx_print_hex>
800004b4: 810007b7 lui a5,0x81000
800004b8: 09078513 addi a0,a5,144 # 81000090 <z+0xfffffe30>
800004bc: c1dff0ef jal ra,800000d8 <vx_print_str>
800004c0: 810007b7 lui a5,0x81000
800004c4: 24078793 addi a5,a5,576 # 81000240 <z+0xffffffe0>
800004c8: 00c7a783 lw a5,12(a5)
800004cc: 00078513 mv a0,a5
800004d0: c45ff0ef jal ra,80000114 <vx_print_hex>
800004d4: 810007b7 lui a5,0x81000
800004d8: 09078513 addi a0,a5,144 # 81000090 <z+0xfffffe30>
800004dc: bfdff0ef jal ra,800000d8 <vx_print_str>
800004e0: 00000013 nop
800004e4: 01c12083 lw ra,28(sp)
800004e8: 01812403 lw s0,24(sp)
800004ec: 02010113 addi sp,sp,32
800004f0: 00008067 ret
800004f4 <simple_kernel>:
800004f4: fe010113 addi sp,sp,-32
800004f8: 00112e23 sw ra,28(sp)
800004fc: 00812c23 sw s0,24(sp)
80000500: 02010413 addi s0,sp,32
80000504: b85ff0ef jal ra,80000088 <vx_warpID>
80000508: fea42623 sw a0,-20(s0)
8000050c: 810007b7 lui a5,0x81000
80000510: fec42703 lw a4,-20(s0)
80000514: 00271713 slli a4,a4,0x2
80000518: 25078793 addi a5,a5,592 # 81000250 <z+0xfffffff0>
8000051c: 00f707b3 add a5,a4,a5
80000520: fec42703 lw a4,-20(s0)
80000524: 00e7a023 sw a4,0(a5)
80000528: fec42783 lw a5,-20(s0)
8000052c: 00078663 beqz a5,80000538 <simple_kernel+0x44>
80000530: 00000513 li a0,0
80000534: b35ff0ef jal ra,80000068 <vx_tmc>
80000538: 00000013 nop
8000053c: 01c12083 lw ra,28(sp)
80000540: 01812403 lw s0,24(sp)
80000544: 02010113 addi sp,sp,32
80000548: 00008067 ret
8000054c <test_wsapwn>:
8000054c: fe010113 addi sp,sp,-32
80000550: 00112e23 sw ra,28(sp)
80000554: 00812c23 sw s0,24(sp)
80000558: 02010413 addi s0,sp,32
8000055c: 800007b7 lui a5,0x80000
80000560: 4f478793 addi a5,a5,1268 # 800004f4 <z+0xff000294>
80000564: fef42623 sw a5,-20(s0)
80000568: fec42583 lw a1,-20(s0)
8000056c: 00400513 li a0,4
80000570: af1ff0ef jal ra,80000060 <vx_wspawn>
80000574: f81ff0ef jal ra,800004f4 <simple_kernel>
80000578: 810007b7 lui a5,0x81000
8000057c: 2507a783 lw a5,592(a5) # 81000250 <z+0xfffffff0>
80000580: 00078513 mv a0,a5
80000584: b91ff0ef jal ra,80000114 <vx_print_hex>
80000588: 810007b7 lui a5,0x81000
8000058c: 09078513 addi a0,a5,144 # 81000090 <z+0xfffffe30>
80000590: b49ff0ef jal ra,800000d8 <vx_print_str>
80000594: 810007b7 lui a5,0x81000
80000598: 25078793 addi a5,a5,592 # 81000250 <z+0xfffffff0>
8000059c: 0047a783 lw a5,4(a5)
800005a0: 00078513 mv a0,a5
800005a4: b71ff0ef jal ra,80000114 <vx_print_hex>
800005a8: 810007b7 lui a5,0x81000
800005ac: 09078513 addi a0,a5,144 # 81000090 <z+0xfffffe30>
800005b0: b29ff0ef jal ra,800000d8 <vx_print_str>
800005b4: 810007b7 lui a5,0x81000
800005b8: 25078793 addi a5,a5,592 # 81000250 <z+0xfffffff0>
800005bc: 0087a783 lw a5,8(a5)
800005c0: 00078513 mv a0,a5
800005c4: b51ff0ef jal ra,80000114 <vx_print_hex>
800005c8: 810007b7 lui a5,0x81000
800005cc: 09078513 addi a0,a5,144 # 81000090 <z+0xfffffe30>
800005d0: b09ff0ef jal ra,800000d8 <vx_print_str>
800005d4: 810007b7 lui a5,0x81000
800005d8: 25078793 addi a5,a5,592 # 81000250 <z+0xfffffff0>
800005dc: 00c7a783 lw a5,12(a5)
800005e0: 00078513 mv a0,a5
800005e4: b31ff0ef jal ra,80000114 <vx_print_hex>
800005e8: 810007b7 lui a5,0x81000
800005ec: 09078513 addi a0,a5,144 # 81000090 <z+0xfffffe30>
800005f0: ae9ff0ef jal ra,800000d8 <vx_print_str>
800005f4: 00000013 nop
800005f8: 01c12083 lw ra,28(sp)
800005fc: 01812403 lw s0,24(sp)
80000600: 02010113 addi sp,sp,32
80000604: 00008067 ret
80000608 <intrinsics_tests>:
80000608: ff010113 addi sp,sp,-16
8000060c: 00112623 sw ra,12(sp)
80000610: 00812423 sw s0,8(sp)
80000614: 01010413 addi s0,sp,16
80000618: c6dff0ef jal ra,80000284 <test_tmc>
8000061c: 810007b7 lui a5,0x81000
80000620: 09478513 addi a0,a5,148 # 81000094 <z+0xfffffe34>
80000624: ab5ff0ef jal ra,800000d8 <vx_print_str>
80000628: 00400513 li a0,4
8000062c: a3dff0ef jal ra,80000068 <vx_tmc>
80000630: d35ff0ef jal ra,80000364 <test_divergence>
80000634: 00100513 li a0,1
80000638: a31ff0ef jal ra,80000068 <vx_tmc>
8000063c: 810007b7 lui a5,0x81000
80000640: 0a878513 addi a0,a5,168 # 810000a8 <z+0xfffffe48>
80000644: a95ff0ef jal ra,800000d8 <vx_print_str>
80000648: f05ff0ef jal ra,8000054c <test_wsapwn>
8000064c: 00000013 nop
80000650: 00c12083 lw ra,12(sp)
80000654: 00812403 lw s0,8(sp)
80000658: 01010113 addi sp,sp,16
8000065c: 00008067 ret
80000660 <mat_add_kernel>:
80000660: fc010113 addi sp,sp,-64
80000664: 02112e23 sw ra,60(sp)
80000668: 02812c23 sw s0,56(sp)
8000066c: 04010413 addi s0,sp,64
80000670: fca42623 sw a0,-52(s0)
80000674: fcc42783 lw a5,-52(s0)
80000678: fef42623 sw a5,-20(s0)
8000067c: a0dff0ef jal ra,80000088 <vx_warpID>
80000680: fea42423 sw a0,-24(s0)
80000684: a0dff0ef jal ra,80000090 <vx_threadID>
80000688: fea42223 sw a0,-28(s0)
8000068c: fec42783 lw a5,-20(s0)
80000690: 0107a783 lw a5,16(a5)
80000694: fe842703 lw a4,-24(s0)
80000698: 00f77e63 bgeu a4,a5,800006b4 <mat_add_kernel+0x54>
8000069c: fec42783 lw a5,-20(s0)
800006a0: 00c7a783 lw a5,12(a5)
800006a4: fe442703 lw a4,-28(s0)
800006a8: 00f77663 bgeu a4,a5,800006b4 <mat_add_kernel+0x54>
800006ac: 00100793 li a5,1
800006b0: 0080006f j 800006b8 <mat_add_kernel+0x58>
800006b4: 00000793 li a5,0
800006b8: fef401a3 sb a5,-29(s0)
800006bc: fe344783 lbu a5,-29(s0)
800006c0: 0017f793 andi a5,a5,1
800006c4: fef401a3 sb a5,-29(s0)
800006c8: fe344783 lbu a5,-29(s0)
800006cc: 00078513 mv a0,a5
800006d0: 9a9ff0ef jal ra,80000078 <vx_split>
800006d4: fe344783 lbu a5,-29(s0)
800006d8: 06078663 beqz a5,80000744 <mat_add_kernel+0xe4>
800006dc: fec42783 lw a5,-20(s0)
800006e0: 00c7a703 lw a4,12(a5)
800006e4: fe842783 lw a5,-24(s0)
800006e8: 02f707b3 mul a5,a4,a5
800006ec: fe442703 lw a4,-28(s0)
800006f0: 00f707b3 add a5,a4,a5
800006f4: fcf42e23 sw a5,-36(s0)
800006f8: fec42783 lw a5,-20(s0)
800006fc: 0007a703 lw a4,0(a5)
80000700: fdc42783 lw a5,-36(s0)
80000704: 00279793 slli a5,a5,0x2
80000708: 00f707b3 add a5,a4,a5
8000070c: 0007a683 lw a3,0(a5)
80000710: fec42783 lw a5,-20(s0)
80000714: 0047a703 lw a4,4(a5)
80000718: fdc42783 lw a5,-36(s0)
8000071c: 00279793 slli a5,a5,0x2
80000720: 00f707b3 add a5,a4,a5
80000724: 0007a703 lw a4,0(a5)
80000728: fec42783 lw a5,-20(s0)
8000072c: 0087a603 lw a2,8(a5)
80000730: fdc42783 lw a5,-36(s0)
80000734: 00279793 slli a5,a5,0x2
80000738: 00f607b3 add a5,a2,a5
8000073c: 00e68733 add a4,a3,a4
80000740: 00e7a023 sw a4,0(a5)
80000744: 93dff0ef jal ra,80000080 <vx_join>
80000748: 00000013 nop
8000074c: 03c12083 lw ra,60(sp)
80000750: 03812403 lw s0,56(sp)
80000754: 04010113 addi sp,sp,64
80000758: 00008067 ret
8000075c <main>:
8000075c: ff010113 addi sp,sp,-16
80000760: 00112623 sw ra,12(sp)
80000764: 00812423 sw s0,8(sp)
80000768: 01010413 addi s0,sp,16
8000076c: 00100513 li a0,1
80000770: 8f9ff0ef jal ra,80000068 <vx_tmc>
80000774: e95ff0ef jal ra,80000608 <intrinsics_tests>
80000778: 00000793 li a5,0
8000077c: 00078513 mv a0,a5
80000780: 00c12083 lw ra,12(sp)
80000784: 00812403 lw s0,8(sp)
80000788: 01010113 addi sp,sp,16
8000078c: 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+0xfff8d4>
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+0xfff918>
81000078: 0064 addi s1,sp,12
8100007a: 0000 unimp
8100007c: 0065 c.nop 25
8100007e: 0000 unimp
81000080: 0066 c.slli zero,0x19
81000082: 0000 unimp
81000084: 6574 flw fa3,76(a0)
81000086: 745f7473 csrrci s0,0x745,30
8100008a: 636d lui t1,0x1b
8100008c: 000a c.slli zero,0x2
8100008e: 0000 unimp
81000090: 000a c.slli zero,0x2
81000092: 0000 unimp
81000094: 6574 flw fa3,76(a0)
81000096: 645f7473 csrrci s0,0x645,30
8100009a: 7669 lui a2,0xffffa
8100009c: 7265 lui tp,0xffff9
8100009e: 636e6567 0x636e6567
810000a2: 0a65 addi s4,s4,25
810000a4: 0000 unimp
810000a6: 0000 unimp
810000a8: 6574 flw fa3,76(a0)
810000aa: 735f7473 csrrci s0,0x735,30
810000ae: 6170 flw fa2,68(a0)
810000b0: 000a6e77 0xa6e77
810000b4: 0030 addi a2,sp,8
810000b6: 0000 unimp
810000b8: 0031 c.nop 12
810000ba: 0000 unimp
810000bc: 0032 c.slli zero,0xc
810000be: 0000 unimp
810000c0: 00000033 add zero,zero,zero
810000c4: 0034 addi a3,sp,8
810000c6: 0000 unimp
810000c8: 0035 c.nop 13
810000ca: 0000 unimp
810000cc: 0036 c.slli zero,0xd
810000ce: 0000 unimp
810000d0: 00000037 lui zero,0x0
810000d4: 0038 addi a4,sp,8
810000d6: 0000 unimp
810000d8: 0039 c.nop 14
810000da: 0000 unimp
810000dc: 0061 c.nop 24
810000de: 0000 unimp
810000e0: 0062 c.slli zero,0x18
810000e2: 0000 unimp
810000e4: 00000063 beqz zero,810000e4 <main+0xfff988>
810000e8: 0064 addi s1,sp,12
810000ea: 0000 unimp
810000ec: 0065 c.nop 25
810000ee: 0000 unimp
810000f0: 0066 c.slli zero,0x19
Disassembly of section .data:
810000f4 <hextoa>:
810000f4: 0000 unimp
810000f6: 8100 0x8100
810000f8: 0004 0x4
810000fa: 8100 0x8100
810000fc: 0008 0x8
810000fe: 8100 0x8100
81000100: 000c 0xc
81000102: 8100 0x8100
81000104: 0010 0x10
81000106: 8100 0x8100
81000108: 0014 0x14
8100010a: 8100 0x8100
8100010c: 0018 0x18
8100010e: 8100 0x8100
81000110: 001c 0x1c
81000112: 8100 0x8100
81000114: 0020 addi s0,sp,8
81000116: 8100 0x8100
81000118: 0024 addi s1,sp,8
8100011a: 8100 0x8100
8100011c: 0028 addi a0,sp,8
8100011e: 8100 0x8100
81000120: 002c addi a1,sp,8
81000122: 8100 0x8100
81000124: 0030 addi a2,sp,8
81000126: 8100 0x8100
81000128: 0034 addi a3,sp,8
8100012a: 8100 0x8100
8100012c: 0038 addi a4,sp,8
8100012e: 8100 0x8100
81000130: 003c addi a5,sp,8
81000132: 8100 0x8100
81000134 <hextoa>:
81000134: 0044 addi s1,sp,4
81000136: 8100 0x8100
81000138: 0048 addi a0,sp,4
8100013a: 8100 0x8100
8100013c: 004c addi a1,sp,4
8100013e: 8100 0x8100
81000140: 0050 addi a2,sp,4
81000142: 8100 0x8100
81000144: 0054 addi a3,sp,4
81000146: 8100 0x8100
81000148: 0058 addi a4,sp,4
8100014a: 8100 0x8100
8100014c: 005c addi a5,sp,4
8100014e: 8100 0x8100
81000150: 0060 addi s0,sp,12
81000152: 8100 0x8100
81000154: 0064 addi s1,sp,12
81000156: 8100 0x8100
81000158: 0068 addi a0,sp,12
8100015a: 8100 0x8100
8100015c: 006c addi a1,sp,12
8100015e: 8100 0x8100
81000160: 0070 addi a2,sp,12
81000162: 8100 0x8100
81000164: 0074 addi a3,sp,12
81000166: 8100 0x8100
81000168: 0078 addi a4,sp,12
8100016a: 8100 0x8100
8100016c: 007c addi a5,sp,12
8100016e: 8100 0x8100
81000170: 0080 addi s0,sp,64
81000172: 8100 0x8100
81000174 <hextoa>:
81000174: 00b4 addi a3,sp,72
81000176: 8100 0x8100
81000178: 00b8 addi a4,sp,72
8100017a: 8100 0x8100
8100017c: 00bc addi a5,sp,72
8100017e: 8100 0x8100
81000180: 00c0 addi s0,sp,68
81000182: 8100 0x8100
81000184: 00c4 addi s1,sp,68
81000186: 8100 0x8100
81000188: 00c8 addi a0,sp,68
8100018a: 8100 0x8100
8100018c: 00cc addi a1,sp,68
8100018e: 8100 0x8100
81000190: 00d0 addi a2,sp,68
81000192: 8100 0x8100
81000194: 00d4 addi a3,sp,68
81000196: 8100 0x8100
81000198: 00d8 addi a4,sp,68
8100019a: 8100 0x8100
8100019c: 00dc addi a5,sp,68
8100019e: 8100 0x8100
810001a0: 00e0 addi s0,sp,76
810001a2: 8100 0x8100
810001a4: 00e4 addi s1,sp,76
810001a6: 8100 0x8100
810001a8: 00e8 addi a0,sp,76
810001aa: 8100 0x8100
810001ac: 00ec addi a1,sp,76
810001ae: 8100 0x8100
810001b0: 00f0 addi a2,sp,76
810001b2: 8100 0x8100
810001b4 <x>:
810001b4: 0005 c.nop 1
810001b6: 0000 unimp
810001b8: 0005 c.nop 1
810001ba: 0000 unimp
810001bc: 0005 c.nop 1
810001be: 0000 unimp
810001c0: 0005 c.nop 1
810001c2: 0000 unimp
810001c4: 0006 c.slli zero,0x1
810001c6: 0000 unimp
810001c8: 0006 c.slli zero,0x1
810001ca: 0000 unimp
810001cc: 0006 c.slli zero,0x1
810001ce: 0000 unimp
810001d0: 0006 c.slli zero,0x1
810001d2: 0000 unimp
810001d4: 00000007 0x7
810001d8: 00000007 0x7
810001dc: 00000007 0x7
810001e0: 00000007 0x7
810001e4: 0008 0x8
810001e6: 0000 unimp
810001e8: 0008 0x8
810001ea: 0000 unimp
810001ec: 0008 0x8
810001ee: 0000 unimp
810001f0: 0008 0x8
...
810001f4 <y>:
810001f4: 0001 nop
810001f6: 0000 unimp
810001f8: 0001 nop
810001fa: 0000 unimp
810001fc: 0001 nop
810001fe: 0000 unimp
81000200: 0001 nop
81000202: 0000 unimp
81000204: 0001 nop
81000206: 0000 unimp
81000208: 0001 nop
8100020a: 0000 unimp
8100020c: 0001 nop
8100020e: 0000 unimp
81000210: 0001 nop
81000212: 0000 unimp
81000214: 0001 nop
81000216: 0000 unimp
81000218: 0001 nop
8100021a: 0000 unimp
8100021c: 0001 nop
8100021e: 0000 unimp
81000220: 0001 nop
81000222: 0000 unimp
81000224: 0001 nop
81000226: 0000 unimp
81000228: 0001 nop
8100022a: 0000 unimp
8100022c: 0001 nop
8100022e: 0000 unimp
81000230: 0001 nop
...
Disassembly of section .bss:
81000234 <global_argument_struct>:
81000234: 0000 unimp
...
81000238 <global_function_pointer>:
81000238: 0000 unimp
...
8100023c <global_num_threads>:
8100023c: 0000 unimp
...
81000240 <arr>:
...
81000250 <wsapwn_arr>:
...
81000260 <z>:
...
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)
...

Binary file not shown.

View file

@ -1,161 +0,0 @@
:0200000480007A
:100000009705000093850502130540006B10B500AD
:10001000EF000001EF008074130500006B00050085
:10002000130540006B000500F32610029396A6010D
:10003000732600029315A6001316260037F1FF6FF2
:100040003301B1403301D1403301C100F326100226
:1000500063860600130500006B0005006780000042
:100060006B10B500678000006B0005006780000022
:100070006B40B500678000006B20050067800000C2
:100080006B3000006780000073251002678000005D
:100090007325000267800000130540006B00050017
:1000A000F32610029396F600732600029315A6001D
:1000B0001316260037F1FF6F3301B1403301D140F1
:1000C0003301C100F3261002638606001305000009
:1000D0006B00050067800000130141FF2320110021
:1000E0002322B1008345050063880500EF00C001AD
:1000F000130515006FF01FFF8320010083254100C9
:100100001301C10067800000B702010023A0B20004
:1001100067800000130101FE232E1100232C8100B3
:10012000130401022326A4FEB70700810327C4FE9F
:10013000131727009387470FB307F70083A707001C
:1001400013850700EFF05FF9130000008320C10161
:10015000032481011301010267800000130101FEE5
:10016000232E1100232C8100130401022326A4FE58
:100170002324B4FE0325C4FEEFF01FF6032584FEFE
:10018000EFF05FF9B707008113850704EFF0DFF4A4
:10019000130000008320C101032481011301010227
:1001A00067800000130101FE232E1100232C810023
:1001B00013040102B707008183A7C7231385070033
:1001C000EFF09FEAB707008103A78723B7070081F5
:1001D00083A7472313850700E7000700EFF0DFEA56
:1001E0002326A4FE8327C4FE6388070013050000AE
:1001F000EFF09FE76F00C00013051000EFF0DFE69F
:10020000130000008320C1010324810113010102B6
:1002100067800000130101FE232E1100232C8100B2
:10022000130401022326A4FE2324B4FE2322C4FEC9
:100230002320D4FEB7070081032744FE23ACE72226
:10024000B7070081032704FE23AAE722B70700812E
:10025000032784FE23AEE722B70700809387471A5F
:10026000938507000325C4FEEFF09FDFEFF09FF3B7
:10027000130000008320C101032481011301010246
:1002800067800000130101FE232E1100232C810042
:1002900013040102B707008113854708EFF0DFE37D
:1002A00013054000EFF05FDCEFF09FDE2326A4FE95
:1002B0000327C4FEB70700818326C4FE9396260059
:1002C00093870724B387F60023A0E70013051000E7
:1002D000EFF09FD9B707008183A707241385070094
:1002E000EFF05FE3B707008113850709EFF0DFDE6A
:1002F000B70700819387072483A74700138507006A
:10030000EFF05FE1B707008113850709EFF0DFDC4D
:10031000B70700819387072483A787001385070009
:10032000EFF05FDFB707008113850709EFF0DFDA31
:10033000B70700819387072483A7C70013850700A9
:10034000EFF05FDDB707008113850709EFF0DFD815
:10035000130000008320C101032481011301010265
:1003600067800000130101FE232E1100232C810061
:1003700013040102EFF0DFD12326A4FE8327C4FE7D
:1003800093B72700A305F4FE8347B4FE1385070047
:10039000EFF09FCE8347B4FE638407068327C4FE35
:1003A00093B717002305F4FE8347A4FE13850700C7
:1003B000EFF09FCC8347A4FE63820702B70700815A
:1003C0000327C4FE1317270093870724B307F700FA
:1003D0001307A00023A0E7006F000002B707008109
:1003E0000327C4FE1317270093870724B307F700DA
:1003F0001307B00023A0E700EFF09FC86F0040068E
:100400008327C4FE93B73700A304F4FE834794FE0A
:1004100013850700EFF05FC6834794FE63820702EF
:10042000B70700810327C4FE13172700938707240B
:10043000B307F7001307C00023A0E7006F00000216
:10044000B70700810327C4FE1317270093870724EB
:10045000B307F7001307D00023A0E700EFF05FC257
:10046000EFF01FC2B707008183A707241385070099
:10047000EFF05FCAB707008113850709EFF0DFC50A
:10048000B70700819387072483A7470013850700D8
:10049000EFF05FC8B707008113850709EFF0DFC3EE
:1004A000B70700819387072483A787001385070078
:1004B000EFF05FC6B707008113850709EFF0DFC1D2
:1004C000B70700819387072483A7C7001385070018
:1004D000EFF05FC4B707008113850709EFF0DFBFB6
:1004E000130000008320C1010324810113010102D4
:1004F00067800000130101FE232E1100232C8100D0
:1005000013040102EFF05FB82326A4FEB7070081B1
:100510000327C4FE1317270093870725B307F700A7
:100520000327C4FE23A0E7008327C4FE63860700D9
:1005300013050000EFF05FB3130000008320C1013A
:10054000032481011301010267800000130101FEF1
:10055000232E1100232C810013040102B707008011
:100560009387474F2326F4FE8325C4FE13054000DE
:10057000EFF01FAFEFF01FF8B707008183A7072543
:1005800013850700EFF01FB9B7070081138507092E
:10059000EFF09FB4B70700819387072583A7470033
:1005A00013850700EFF01FB7B70700811385070910
:1005B000EFF09FB2B70700819387072583A78700D5
:1005C00013850700EFF01FB5B707008113850709F2
:1005D000EFF09FB0B70700819387072583A7C70077
:1005E00013850700EFF01FB3B707008113850709D4
:1005F000EFF09FAE130000008320C10103248101AE
:100600001301010267800000130101FF232611007E
:100610002324810013040101EFF0DFC6B707008136
:1006200013854709EFF05FAB13054000EFF0DFA340
:10063000EFF05FD313051000EFF01FA3B7070081A1
:100640001385870AEFF05FA9EFF05FF01300000059
:100650008320C10003248100130101016780000091
:10066000130101FC232E1102232C81021304010427
:100670002326A4FC8327C4FC2326F4FEEFF0DFA08E
:100680002324A4FEEFF0DFA02322A4FE8327C4FED0
:1006900083A70701032784FE637EF7008327C4FE38
:1006A00083A7C700032744FE6376F7009307100073
:1006B0006F00800093070000A301F4FE834734FE1F
:1006C00093F71700A301F4FE834734FE1385070058
:1006D000EFF09F9A834734FE638607068327C4FEA4
:1006E00003A7C700832784FEB307F702032744FE4E
:1006F000B307F700232EF4FC8327C4FE03A70700EB
:100700008327C4FD93972700B307F70083A607004C
:100710008327C4FE03A747008327C4FD93972700C0
:10072000B307F70003A707008327C4FE03A68700CB
:100730008327C4FD93972700B307F6003387E600AD
:1007400023A0E700EFF0DF93130000008320C10334
:10075000032481031301010467800000130101FFDA
:100760002326110023248100130401011305100026
:10077000EFF09F8FEFF05FE993070000138507000C
:100780008320C10003248100130101016780000060
:02000004810079
:10000000300000003100000032000000330000002A
:10001000340000003500000036000000370000000A
:10002000380000003900000061000000620000009C
:10003000630000006400000065000000660000002E
:100040000A00000030000000310000003200000013
:1000500033000000340000003500000036000000CE
:100060003700000038000000390000006100000087
:1000700062000000630000006400000065000000F2
:1000800066000000746573745F746D630A0000009D
:100090000A000000746573745F6469766572676551
:1000A0006E63650A00000000746573745F737061AD
:1000B000776E0A00300000003100000032000000BE
:1000C000330000003400000035000000360000005E
:1000D0003700000038000000390000006100000017
:1000E0006200000063000000640000006500000082
:0200F0006600A8
:1000F4000000008104000081080000810C000081E0
:100104001000008114000081180000811C0000818F
:100114002000008124000081280000812C0000813F
:100124003000008134000081380000813C000081EF
:1001340044000081480000814C000081500000818F
:1001440054000081580000815C000081600000813F
:1001540064000081680000816C00008170000081EF
:1001640074000081780000817C000081800000819F
:10017400B4000081B8000081BC000081C00000818F
:10018400C4000081C8000081CC000081D00000813F
:10019400D4000081D8000081DC000081E0000081EF
:1001A400E4000081E8000081EC000081F00000819F
:1001B4000500000005000000050000000500000027
:1001C4000600000006000000060000000600000013
:1001D40007000000070000000700000007000000FF
:1001E40008000000080000000800000008000000EB
:1001F40001000000010000000100000001000000F7
:1002040001000000010000000100000001000000E6
:1002140001000000010000000100000001000000D6
:1002240001000000010000000100000001000000C6
:040000058000000077
:00000001FF

View file

@ -1,88 +0,0 @@
#include "intrinsics/vx_intrinsics.h"
#include "io/vx_io.h"
#include "tests/tests.h"
#include "vx_api/vx_api.h"
typedef struct
{
unsigned * x;
unsigned * y;
unsigned * z;
unsigned numColums;
unsigned numRows;
} mat_add_args_t;
unsigned x[] = {5, 5, 5, 5,
6, 6, 6, 6,
7, 7, 7, 7,
8, 8, 8, 8};
unsigned y[] = {1, 1, 1, 1,
1, 1, 1, 1,
1, 1, 1, 1,
1, 1, 1, 1};
unsigned z[] = {0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0};
void mat_add_kernel(void * void_arguments)
{
mat_add_args_t * arguments = (mat_add_args_t *) void_arguments;
unsigned wid = vx_warpID();
unsigned tid = vx_threadID();
bool valid = (wid < arguments->numRows) && (tid < arguments->numColums);
__if (valid)
{
unsigned index = (wid * arguments->numColums) + tid;
arguments->z[index] = arguments->x[index] + arguments->y[index];
}
__endif
}
int main()
{
// Main is called with all threads active of warp 0
vx_tmc(1);
///////////////////////////////////////////////////////////////////////
// mat_add_args_t arguments;
// arguments.x = x;
// arguments.y = y;
// arguments.z = z;
// arguments.numColums = 4;
// arguments.numRows = 4;
// int numWarps = 4;
// int numThreads = 4;
// vx_spawnWarps(numWarps, numThreads, mat_add_kernel, &arguments);
// for (int i = 0; i < arguments.numRows; i++)
// {
// for (int j = 0; j < arguments.numColums; j++)
// {
// unsigned index = (i * arguments.numColums) + j;
// vx_print_hex(z[index]);
// vx_print_str(" ");
// }
// vx_print_str("\n");
// }
///////////////////////////////////////////////////////////////////////
intrinsics_tests();
///////////////////////////////////////////////////////////////////////
return 0;
}