Vector changes

This commit is contained in:
proshan3
2019-11-21 17:07:49 -05:00
parent 629f376551
commit 9edb7fe76c
14 changed files with 4927 additions and 3941 deletions

View File

@@ -1,10 +1,13 @@
COMP = /home/fares/dev/riscv-gnu-toolchain-vector/drops/bin/riscv32-unknown-elf-gcc COMP = /home/priya/dev/riscv_vec/riscv-gnu/bin/riscv32-unknown-elf-gcc
CC_FLAGS = -ffreestanding -O0 -Wl,--gc-sections -nostartfiles -nostdlib -nostartfiles -nodefaultlibs -Wl,-Bstatic,-T,../vortex_link.ld -march=rv32imv -mabi=ilp32 CC_FLAGS = -ffreestanding -O0 -Wl,--gc-sections -nostartfiles -nostdlib -nostartfiles -nodefaultlibs -Wl,-Bstatic,-T,../vortex_link.ld -march=rv32imv -mabi=ilp32
DMP = /home/fares/dev/riscv-gnu-toolchain-vector/drops/bin/riscv32-unknown-elf-objdump #DMP = /home/fares/dev/riscv-gnu-toolchain-vector/drops/bin/riscv32-unknown-elf-objdump
CPY = /home/fares/dev/riscv-gnu-toolchain-vector/drops/bin/riscv32-unknown-elf-objcopy #CPY = /home/fares/dev/riscv-gnu-toolchain-vector/drops/bin/riscv32-unknown-elf-objcopy
DMP = /home/priya/dev/riscv_vec/riscv-gnu/bin/riscv32-unknown-elf-objdump
CPY = /home/priya/dev/riscv_vec/riscv-gnu/bin/riscv32-unknown-elf-objcopy
# VX_STR = ../../startup/vx_start.s # VX_STR = ../../startup/vx_start.s
@@ -18,7 +21,8 @@ VX_API = ../../vx_api/vx_api.c
VX_TEST = ../../tests/tests.c VX_TEST = ../../tests/tests.c
VX_FIO = ../../fileio/fileio.s VX_FIO = ../../fileio/fileio.s
VX_VEC = vx_vec.s VX_VEC = vx_vec.s
LIBS = /home/fares/dev/riscv-gnu-toolchain-vector/drops/riscv32-unknown-elf/lib/libc.a /home/fares/dev/riscv-gnu-toolchain-vector/drops/riscv32-unknown-elf/lib/libstdc++.a -static-libgcc -lgcc #LIBS = /home/fares/dev/riscv-gnu-toolchain-vector/drops/riscv32-unknown-elf/lib/libc.a /home/fares/dev/riscv-gnu-toolchain-vector/drops/riscv32-unknown-elf/lib/libstdc++.a -static-libgcc -lgcc
LIBS = /home/priya/dev/riscv_vec/riscv-gnu/riscv32-unknown-elf/lib/libc.a /home/priya/dev/riscv_vec/riscv-gnu/riscv32-unknown-elf/lib/libstdc++.a -static-libgcc -lgcc
VX_MAIN = vx_vector_main VX_MAIN = vx_vector_main

View File

@@ -4,4 +4,12 @@
.type vx_vec_test, @function .type vx_vec_test, @function
.global vx_vec_test .global vx_vec_test
vx_vec_test: vx_vec_test:
li a0, 2
vsetvli t0, a0, e32, m1
li a0, 10
sw a0, 0(a1)
sw a0, 32(a1)
vlw.v v0, (a1)
vadd.vv v0, v0, v0
vsw.v v0, (a1)
ret ret

File diff suppressed because it is too large Load Diff

BIN
runtime/mains/vector_test/vx_vector_main.elf Normal file → Executable file

Binary file not shown.

View File

@@ -1,224 +1,288 @@
:0200000480007A :0200000480007A
:100000009705000093854507130540006B10B50068 :10000000970500009385C506130540006B10B500E9
:10001000EF004006130510006B00050017250000D7 :10001000EF00C005130510006B000500138581C3B8
:100020001305C5D917260000130686D93306A64046 :100020001386C1C33306A64093050000EF00901D60
:1000300093050000EF00806B170500001305855B3A :10003000171500001305858DEF00D008EF00D012D2
:10004000EF00C056EF00C060130540006B000500D4 :10004000130540006B000500EF0010046F00D0089E
:08005000EF0080526F00C05662 :10005000B707000093870700638807003715008003
:10005800B70700009387070063880700370500800B :10006000130585906F00100667800000130540009F
:100068001305055F6F00005467800000130540000A :100070006B0005009711000093814179F32610026F
:100078006B0005009721000093814110F3261002C0 :100080009396A601732600029315A6001316260068
:100088009396A601732600029315A6001316260060 :1000900037F1FF6F3301B1403301D1403301C1006B
:1000980037F1FF6F3301B1403301D1403301C10063 :1000A000F326100263860600130500006B000500AE
:1000A800F326100263860600130500006B000500A6 :1000B0006780000013052000D77285001305A0009B
:1000B8006780000067800000130101FD232681028C :1000C00023A0A50023A0A50207E005125700000207
:1000C80013040103232EA4FC232CB4FC232AC4FC10 :1000D00027E0050267800000130101FD232681024D
:1000D8008327C4FD83A707002326F4FE832744FD56 :1000E00013040103232EA4FC232CB4FC232AC4FCF8
:1000E8002322F4FE832744FE03C707008327C4FEA8 :1000F0008327C4FD83A707002326F4FE930744FD4E
:1000F8002380E7008327C4FE93871700032744FE65 :100100002322F4FE832744FE03C707008327C4FE8F
:10010800034717002380E7008327C4FE938727004F :100110002380E7008327C4FE93871700032744FE4C
:10011800032744FE034727002380E7008327C4FE04 :10012000034717002380E7008327C4FE9387270037
:1001280093873700032744FE034737002380E700FF :10013000032744FE034727002380E7008327C4FEEC
:100138008327C4FE938747002326F4FE232404FE66 :1001400093873700032744FE034737002380E700E7
:100148006F004003832784FE032784FDB307F7006D :100150008327C4FE938747002326F4FE232404FE4E
:1001580003C707008327C4FE2380E7008327C4FE64 :100160006F004003832784FE032784FDB307F70055
:10016800938717002326F4FE832784FE93871700BE :1001700003C707008327C4FE2380E7008327C4FE4C
:100178002324F4FE032784FE832744FDE344F7FC8D :10018000938717002326F4FE832784FE93871700A6
:100188008327C4FD0327C4FE23A0E7001300000053 :100190002324F4FE832744FD032784FEE344F7FC75
:100198000324C1021301010367800000130101FD5C :1001A0008327C4FE2320F4FE832704FE93F7370041
:1001A8002326810213040103232EA4FC232CB4FC70 :1001B000032704FEB307F7002320F4FE832704FE81
:1001B8008327C4FD83A707002326F4FE832744FE74 :1001C0002326F4FE8327C4FD0327C4FE23A0E700F3
:1001C8002320F4FE8327C4FE03C70700832704FE09 :1001D000130000000324C102130101036780000023
:1001D8002380E700832704FE938717000327C4FEC4 :1001E000130101FC232E8102130401042326A4FC25
:1001E800034717002380E700832704FE938727002F :1001F0002324B4FC8327C4FC83A707002326F4FE32
:1001F8000327C4FE034727002380E700832704FE64 :100200009307C4FD2322F4FE8327C4FE03C707001F
:10020800938737000327C4FE034737002380E7009E :10021000832744FE2380E700832744FE938717004B
:100218008327C4FE938747002326F4FE232404FE85 :100220000327C4FE034717002380E700832744FE0B
:100228006F004003832784FE032784FDB307F7008C :10023000938727000327C4FE034727002380E70096
:100238000327C4FE034707002380E7008327C4FE83 :10024000832744FE938737000327C4FE0347370004
:10024800938717002326F4FE832784FE93871700DD :100250002380E7008327C4FE938747002326F4FE0C
:100258002324F4FE032784FE832744FEE344F7FCAB :10026000232404FE6F004003832784FE032784FCBD
:100268008327C4FD0327C4FE23A0E7001300000072 :10027000B307F7000327C4FE034707002380E70006
:100278000324C1021301010367800000130101FF79 :100280008327C4FE938717002326F4FE832784FE6A
:100288002326810013040101130000000324C10088 :10029000938717002324F4FE8327C4FD032784FEDD
:100298001301010167800000130101FE232E810074 :1002A000E344F7FC8327C4FE2320F4FE832704FEE7
:1002A800130401022326A4FE2324B4FE832784FE1C :1002B00093F73700032704FEB307F7002320F4FE6B
:1002B8003727000023A2E7009307000013850700F3 :1002C000832704FE2326F4FE8327C4FC0327C4FEF1
:1002C8000324C1011301010267800000130101FE2C :1002D00023A0E700130000000324C103130101045D
:1002D800232E8100130401022326A4FE9307100095 :1002E00067800000130101FF232681001304010130
:1002E800138507000324C101130101026780000080 :1002F000130000000324C100130101016780000006
:1002F800130101FF232681001304010113000000EC :10030000130101FE232E8100130401022326A4FE03
:100308000324C1001301010167800000130101FFEC :100310002324B4FE832784FE3727000023A2E700AE
:100318002326810013040101130000000324C100F7 :1003200093070000138507000324C1011301010294
:100328001301010167800000130101FD23268102EA :1003300067800000130101FE232E1100232C810091
:1003380013040103232EA4FC232CB4FC232AC4FC9D :10034000130401022326A4FEB7170080138507CDEE
:10034800B70701002324F4FE232604FE6F00C00231 :10035000EF00C04F93071000138507008320C101F1
:100358008327C4FE032784FDB307F70083C707007C :10036000032481011301010267800000130101FDD4
:1003680013870700832784FE23A0E7008327C4FEA2 :10037000232611022324810213040103232EA4FC4B
:10037800938717002326F4FE0327C4FE832744FD32 :10038000232CB4FC232AC4FCB70700712326F4FEF7
:10038800E348F7FC832744FD138507000324C102D3 :10039000B70700722324F4FE930730002322F4FEF3
:100398001301010367800000130101FD2326810278 :1003A000130744FE9307C4FE13064000930507009D
:1003A80013040103232EA4FC8327C4FD63D807008C :1003B00013850700EFF05FD21307C4FD9307C4FE57
:1003B8008327C4FDB307F040232EF4FC0327C4FDB4 :1003C000130640009305070013850700EFF0DFD008
:1003C800B73700009387078063D8E700B737000086 :1003D000130784FD9307C4FE13064000930507002E
:1003D80093870780232EF4FC83A701C32326F4FE0A :1003E00013850700EFF05FCF130744FD9307C4FEAA
:1003E80003A701C38327C4FD3307F70023A8E1C28D :1003F000130640009305070013850700EFF0DFCDDB
:1003F8008327C4FE138507000324C10213010103E8 :1004000083A7C1C2E7800700130704FE930784FE99
:1004080067800000130101FE232E1100232C8100B8 :100410009305070013850700EFF09FDC832704FE98
:10041800130401022326A4FE13050000EF00400E7A :10042000138507008320C102032481021301010305
:10042800130000008320C10103248101130101028C :1004300067800000130101FD23261102232481029D
:1004380067800000130101FF2326810013040101D6 :1004400013040103232EA4FC232CB4FC232AC4FC94
:10044800130000000324C1001301010167800000AC :10045000B70700712324F4FEB70700722326F4FEC9
:10045800130101FF2326810013040101130000008A :10046000930740002322F4FE130744FE930784FE03
:100468000324C1001301010167800000130101FF8B :10047000130640009305070013850700EFF0DFC562
:10047800232611002324810013040101EF00C00A80 :100480001307C4FD930784FE13064000930507007D
:1004880093070500138507008320C100032481001A :1004900013850700EFF05FC4130784FD930784FE04
:100498001301010167800000130101FF2326810079 :1004A000130640009305070013850700EFF0DFC235
:1004A80013040101130000000324C100130101011A :1004B000130744FD930784FE1306400093050700CD
:1004B80067800000130101FF232681001304010156 :1004C00013850700EFF05FC183A7C1C2E780070073
:1004C80083A781C39386170023ACD1C21385070085 :1004D000832744FD138507008320C1020324810282
:1004D8000324C1001301010167800000130101FF1B :1004E0001301010367800000130101FD232611029F
:1004E8002326810013040101130000000324C10026 :1004F0002324810213040103232EA4FC232CB4FC27
:1004F80013010101678000006B10B50067800000E0 :10050000232AC4FCB70700712326F4FE930750008A
:100508006B000500678000006B40B5006780000045 :100510002324F4FE130784FE9307C4FE1306400051
:100518006B200500678000006B30000067800000DA :100520009305070013850700EFF01FBB1307C4FDF9
:1005280073251002678000007325000267800000B1 :100530009307C4FE130640009305070013850700C8
:10053800130540006B000500F32610029396F600A1 :10054000EFF09FB99307C4FE032644FD832584FD85
:10054800732600029315A6001316260037F1FF6FD5 :1005500013850700EFF05FB883A7C1C2E7800700EB
:100558003301B1403301D1403301C100F326100209 :10056000832744FD138507008320C10203248102F1
:1005680063860600130500006B0005006780000025 :100570001301010367800000130101FD232681029E
:10057800130101FF23261100232481001304010124 :1005800013040103232EA4FC8327C4FD63D80700B2
:1005880013051000EFF0DFF7EFF0DFB21300000003 :100590008327C4FDB307F040232EF4FC0327C4FDDA
:10059800138507008320C100032481001301010192 :1005A000B73700009387078063D8E700B7370000AC
:1005A800678000009305050093060000130600000D :1005B00093870780232EF4FC83A701C32326F4FE30
:1005B800130500006F00C020130101FF9305000020 :1005C00003A701C38327C4FD3307F70023A8E1C2B3
:1005C800232481002326110013040500EF00C0280E :1005D0008327C4FE138507000324C102130101030E
:1005D80003A581C28327C50363840700E78007005A :1005E00067800000130101FE232E1100232C8100DF
:1005E80013050400EFF01FE2130101FF232481002B :1005F000130401022326A4FE13050000EF00001ED1
:1005F8002322910037240080B72400809387C49772 :10060000130000008320C1010324810113010102B2
:100608001304C4973304F4402326110013542440E0 :1006100067800000130101FD2326110223248102BB
:1006180063020402931424009384C4FFB384F40097 :1006200013040103232EA4FC232CB4FC232AC4FCB2
:1006280083A704001304F4FF9384C4FFE780070042 :10063000B70700712326F4FEB70700722324F4FEE7
:10063800E31804FE8320C1000324810083244100C1 :10064000930770002322F4FE130744FE9307C4FEB1
:100648001301010167800000130101FF23248100C9 :10065000130640009305070013850700EFF0DFA79E
:1006580023202101372400803729008093078497BD :100660001307C4FD9307C4FE13064000930507005B
:10066800130989973309F9402326110023229100A1 :1006700013850700EFF05FA6130784FD9307C4FE00
:100678001359294063000902130484979304000066 :10068000130640009305070013850700EFF0DFA471
:10068800832704009384140013044400E7800700C0 :10069000130744FD9307C4FE1306400093050700AB
:10069800E31899FE37240080372900809307849750 :1006A00013850700EFF05FA383A7C1C2E7800700AF
:1006A8001309C9973309F94013592940630009020E :1006B000130704FE930784FE9305070013850700C4
:1006B8001304849793040000832704009384140090 :1006C000EFF01FB2832704FE138507008320C102C9
:1006C80013044400E7800700E31899FE8320C10063 :1006D000032481021301010367800000130101FF5D
:1006D800032481008324410003290100130101013F :1006E000232611002324810013040101B717008081
:1006E800678000001303F00013070500637EC30250 :1006F000138547CEEF008015130000008320C10052
:1006F8009377F7006390070A63920508937606FFDD :10070000032481001301010167800000130101FF30
:100708001376F600B386E6002320B7002322B7004D :10071000232611002324810013040101EF00800E21
:100718002324B7002326B70013070701E366D7FE93 :1007200093070500138507008320C100032481007F
:100728006314060067800000B306C3409396260052 :100730001301010167800000130101FF232611004E
:1007380097020000B38656006780C6002307B700FB :100740002324810013040101B7170080138587D08B
:10074800A306B7002306B700A305B7002305B70023 :10075000EF00C00F130000008320C10003248100BC
:10075800A304B7002304B700A303B7002303B7001B :100760001301010167800000130101FF232611001E
:10076800A302B7002302B700A301B7002301B70013 :100770002324810013040101B71700801385C7D219
:10077800A300B7002300B7006780000093F5F50FCA :10078000EF00C00C83A781C39386170023ACD1C2AE
:1007880093968500B3E5D50093960501B3E5D500AA :10079000138507008320C100032481001301010198
:100798006FF0DFF69396270097020000B3865600A5 :1007A00067800000130101FF23261100232481002C
:1007A80093820000E78006FA93800200938707FF90 :1007B00013040101B7170080138587D5EF000009E6
:1007B8003307F7403306F600E378C3F66FF0DFF34C :1007C000130000008320C1000324810013010101F4
:1007C80003A781C283278714638C070403A7470004 :1007D000678000006B10B500678000006B000500AB
:1007D8001308F001634EE8061318270063060502A4 :1007E000678000006B40B500678000006B2005004B
:1007E800338307012324C30883A88718130610003E :1007F000678000006B3000006780000073251002E6
:1007F8003316E600B3E8C80023A417192324D3103E :100800006780000073250002678000001305400028
:10080800930620006304D5021307170023A2E7000C :100810006B000500F32610029396F6007326000283
:10081800B387070123A4B700130500006780000011 :100820009315A6001316260037F1FF6F3301B14070
:100828009307C7142324F7146FF05FFA83A6C71839 :100830003301D1403301C100F32610026386060064
:100838001307170023A2E70033E6C60023A6C7184C :10084000130500006B00050067800000130141FFE5
:10084800B387070123A4B7001305000067800000E1 :10085000232011002322B100834505006388050091
:100858001305F0FF67800000130101FD23248101C7 :10086000EF00C001130515006FF01FFF832001008A
:1008680003AC81C2232E3101232C4101232A5101DB :10087000832541001301C10067800000B702010019
:1008780023286101232611022324810223229102C5 :1008800023A0B20067800000130101FF232611009E
:100888002320210323267101930A0500138B0500F9 :10089000232481001304010113051000EFF01FF45D
:10089800130A10009309F0FF03298C146308090256 :1008A000EFF05F8113050000EFF05FF3130000002D
:1008A800832449001384F4FF6342040293942400D0 :1008B000138507008320C100032481001301010177
:1008B800B304990063040B0483A74410638067059D :1008C00067800000930505009306000013060000F2
:1008C8001304F4FF9384C4FFE31634FF8320C102AA :1008D000130500006F00C020130101FF9305000005
:1008D8000324810283244102032901028329C101DF :1008E000232481002326110013040500EF00C028F3
:1008E800032A8101832A4101032B0101832BC100C3 :1008F00003A581C28327C50363840700E78007003F
:1008F800032C81001301010367800000832749004E :1009000013050400EFF01FCE130101FF2324810023
:1009080083A644009387F7FF638A870423A2040021 :100910002322910037140080B7140080938744008D
:10091800E38806FA8327891833178A00832B49004E :10092000130444003304F4402326110013542440DC
:10092800B377F700639E0700E78006008327490036 :1009300063020402931424009384C4FFB384F4007C
:10093800E39477F783278C14E38427F96FF0DFF5C6 :1009400083A704001304F4FF9384C4FFE780070027
:100948008327C91883A544083377F700631C070079 :10095000E31804FE8320C1000324810083244100A6
:1009580013850A00E78006006FF05FFD23228900F7 :100960001301010167800000130101FF23248100AE
:100968006FF01FFB13850500E78006006FF01FFC82 :1009700023202101371400803719008093070400D9
:041978005800008093 :10098000130909003309F94023261100232291009D
:10198000000000006C1C0080D41C00803C1D008006 :100990001359294063000902130404009304000062
:101990000000000000000000000000000000000047 :1009A000832704009384140013044400E7800700A5
:1019A0000000000000000000000000000000000037 :1009B000E31899FE3714008037190080930704006C
:1019B0000000000000000000000000000000000027 :1009C000130949003309F94013592940630009020A
:1019C0000000000000000000000000000000000017 :1009D000130404009304000083270400938414008C
:1019D0000000000000000000000000000000000007 :1009E00013044400E7800700E31899FE8320C10048
:1019E00000000000000000000000000000000000F7 :1009F0000324810083244100032901001301010124
:1019F00000000000000000000000000000000000E7 :100A0000678000001303F00013070500637EC30234
:101A000000000000000000000000000000000000D6 :100A10009377F7006390070A63920508937606FFC1
:101A100000000000000000000000000000000000C6 :100A20001376F600B386E6002320B7002322B70032
:101A200000000000000000000100000000000000B5 :100A30002324B7002326B70013070701E366D7FE78
:101A30000E33CDAB34126DE6ECDE05000B0000007A :100A40006314060067800000B306C3409396260037
:101A40000000000000000000000000000000000096 :100A500097020000B38656006780C6002307B700E0
:101A50000000000000000000000000000000000086 :100A6000A306B7002306B700A305B7002305B70008
:101A60000000000000000000000000000000000076 :100A7000A304B7002304B700A303B7002303B70000
:101A70000000000000000000000000000000000066 :100A8000A302B7002302B700A301B7002301B700F8
:101A80000000000000000000000000000000000056 :100A9000A300B7002300B7006780000093F5F50FAF
:101A90000000000000000000000000000000000046 :100AA00093968500B3E5D50093960501B3E5D5008F
:101AA0000000000000000000000000000000000036 :100AB0006FF0DFF69396270097020000B38656008A
:101AB0000000000000000000000000000000000026 :100AC00093820000E78006FA93800200938707FF75
:101AC0000000000000000000000000000000000016 :100AD0003307F7403306F600E378C3F66FF0DFF331
:101AD0000000000000000000000000000000000006 :100AE00003A781C283278714638C070403A74700E9
:101AE00000000000000000000000000000000000F6 :100AF0001308F001634EE806131827006306050289
:101AF00000000000000000000000000000000000E6 :100B0000338307012324C30883A887181306100022
:101B000000000000000000000000000000000000D5 :100B10003316E600B3E8C80023A417192324D31022
:101B100000000000000000000000000000000000C5 :100B2000930620006304D5021307170023A2E700F1
:101B200000000000000000000000000000000000B5 :100B3000B387070123A4B7001305000067800000F6
:101B300000000000000000000000000000000000A5 :100B40009307C7142324F7146FF05FFA83A6C7181E
:101B40000000000000000000000000000000000095 :100B50001307170023A2E70033E6C60023A6C71831
:101B50000000000000000000000000000000000085 :100B6000B387070123A4B7001305000067800000C6
:101B60000000000000000000000000000000000075 :100B70001305F0FF67800000130101FD23248101AC
:101B70000000000000000000000000000000000065 :100B800003AC81C2232E3101232C4101232A5101C0
:101B80000000000000000000000000000000000055 :100B900023286101232611022324810223229102AA
:101B90000000000000000000000000000000000045 :100BA0002320210323267101930A0500138B0500DE
:101BA0000000000000000000000000000000000035 :100BB000130A10009309F0FF03298C14630809023B
:101BB0000000000000000000000000000000000025 :100BC000832449001384F4FF6342040293942400B5
:101BC0000000000000000000000000000000000015 :100BD000B304990063040B0483A744106380670582
:101BD0000000000000000000000000000000000005 :100BE0001304F4FF9384C4FFE31634FF8320C1028F
:101BE00000000000000000000000000000000000F5 :100BF0000324810283244102032901028329C101C4
:101BF00000000000000000000000000000000000E5 :100C0000032A8101832A4101032B0101832BC100A7
:101C000000000000000000000000000000000000D4 :100C1000032C810013010103678000008327490032
:101C100000000000000000000000000000000000C4 :100C200083A644009387F7FF638A870423A2040006
:101C200000000000000000000000000000000000B4 :100C3000E38806FA8327891833178A00832B490033
:101C300000000000000000000000000000000000A4 :100C4000B377F700639E0700E7800600832749001B
:101C40000000000000000000000000000000000094 :100C5000E39477F783278C14E38427F96FF0DFF5AB
:101C50000000000000000000000000000000000084 :100C60008327C91883A544083377F700631C07005E
:101C60000000000000000000000000000000000074 :100C700013850A00E78006006FF05FFD23228900DC
:101C70000000000000000000000000000000000064 :100C80006FF01FFB13850500E78006006FF01FFC67
:101C80000000000000000000000000000000000054 :100C9000300000003100000032000000330000008E
:101C90000000000000000000000000000000000044 :100CA000340000003500000036000000370000006E
:101CA0000000000000000000000000000000000034 :100CB0003800000039000000610000006200000000
:101CB0000000000000000000000000000000000024 :100CC0006300000064000000650000006600000092
:101CC0000000000000000000000000000000000014 :100CD00048656C6C6F2066726F6D205F697361741C
:101CD0000000000000000000000000000000000004 :100CE00074790A004552524F523A205F6B696C6C1E
:101CE00000000000000000000000000000000000F4 :100CF000206E6F742079657420696D706C656D6508
:101CF00000000000000000000000000000000000E4 :100D00006E7465640A0000004552524F523A205FEB
:101D000000000000000000000000000000000000D3 :100D1000756E6C696E6B206E6F74207965742069D6
:101D100000000000000000000000000000000000C3 :100D20006D706C656D656E7465640A004552524F56
:101D200000000000000000000000000000000000B3 :100D3000523A205F67657474696D656F66646179A6
:101D300000000000000000000000000000000000A3 :100D4000206E6F742079657420696D706C656D65B7
:101D40000000000000000000000000000000000093 :100D50006E7465640A0000004552524F523A205F9B
:101D50000000000000000000000000000000000083 :100D60006C696E6B206E6F742079657420696D708C
:101D60000000000000000000000000000000000073 :0A0D70006C656D656E7465640A0021
:101D70000000000000000000000000000000000063 :04100000500000801C
:101D80000000000000000000000000000000000053 :1010080000000000F41200805C130080C41300800C
:101D90000000000000000000000000000000000043 :1010180000000000000000000000000000000000C8
:081DA00000000000000000003B :1010280000000000000000000000000000000000B8
:101DA8008019008000000070000000100000002072 :1010380000000000000000000000000000000000A8
:101048000000000000000000000000000000000098
:101058000000000000000000000000000000000088
:101068000000000000000000000000000000000078
:101078000000000000000000000000000000000068
:101088000000000000000000000000000000000058
:101098000000000000000000000000000000000048
:1010A8000000000000000000010000000000000037
:1010B8000E33CDAB34126DE6ECDE05000B000000FC
:1010C8000000000000000000000000000000000018
:1010D8000000000000000000000000000000000008
:1010E80000000000000000000000000000000000F8
:1010F80000000000000000000000000000000000E8
:1011080000000000000000000000000000000000D7
:1011180000000000000000000000000000000000C7
:1011280000000000000000000000000000000000B7
:1011380000000000000000000000000000000000A7
:101148000000000000000000000000000000000097
:101158000000000000000000000000000000000087
:101168000000000000000000000000000000000077
:101178000000000000000000000000000000000067
:101188000000000000000000000000000000000057
:101198000000000000000000000000000000000047
:1011A8000000000000000000000000000000000037
:1011B8000000000000000000000000000000000027
:1011C8000000000000000000000000000000000017
:1011D8000000000000000000000000000000000007
:1011E80000000000000000000000000000000000F7
:1011F80000000000000000000000000000000000E7
:1012080000000000000000000000000000000000D6
:1012180000000000000000000000000000000000C6
:1012280000000000000000000000000000000000B6
:1012380000000000000000000000000000000000A6
:101248000000000000000000000000000000000096
:101258000000000000000000000000000000000086
:101268000000000000000000000000000000000076
:101278000000000000000000000000000000000066
:101288000000000000000000000000000000000056
:101298000000000000000000000000000000000046
:1012A8000000000000000000000000000000000036
:1012B8000000000000000000000000000000000026
:1012C8000000000000000000000000000000000016
:1012D8000000000000000000000000000000000006
:1012E80000000000000000000000000000000000F6
:1012F80000000000000000000000000000000000E6
:1013080000000000000000000000000000000000D5
:1013180000000000000000000000000000000000C5
:1013280000000000000000000000000000000000B5
:1013380000000000000000000000000000000000A5
:101348000000000000000000000000000000000095
:101358000000000000000000000000000000000085
:101368000000000000000000000000000000000075
:101378000000000000000000000000000000000065
:101388000000000000000000000000000000000055
:101398000000000000000000000000000000000045
:1013A8000000000000000000000000000000000035
:1013B8000000000000000000000000000000000025
:1013C8000000000000000000000000000000000015
:1013D8000000000000000000000000000000000005
:1013E80000000000000000000000000000000000F5
:1013F80000000000000000000000000000000000E5
:1014080000000000000000000000000000000000D4
:1014180000000000000000000000000000000000C4
:081428000000000000000000BC
:101430000810008000000070000000100000002074
:040000058000000077 :040000058000000077
:00000001FF :00000001FF

View File

@@ -640,7 +640,7 @@ Warp::Warp(Core *c, Word id) :
core(c), pc(0x80000000), interruptEnable(true), core(c), pc(0x80000000), interruptEnable(true),
supervisorMode(true), activeThreads(0), reg(0), pred(0), supervisorMode(true), activeThreads(0), reg(0), pred(0),
shadowReg(core->a.getNRegs()), shadowPReg(core->a.getNPRegs()), id(id), shadowReg(core->a.getNRegs()), shadowPReg(core->a.getNPRegs()), id(id),
spawned(false), steps(0), insts(0), loads(0), stores(0) spawned(false), steps(0), insts(0), loads(0), stores(0), VLEN(96)
{ {
D(3, "Creating a new thread with PC: " << hex << this->pc << '\n'); D(3, "Creating a new thread with PC: " << hex << this->pc << '\n');
/* Build the register file. */ /* Build the register file. */

View File

@@ -53,6 +53,8 @@ WordDecoder::WordDecoder(const ArchDef &arch) {
opcode_s = 7; opcode_s = 7;
reg_s = 5; reg_s = 5;
func3_s = 3; func3_s = 3;
mop_s = 3;
vmask_s = 1;
shift_opcode = 0; shift_opcode = 0;
shift_rd = opcode_s; shift_rd = opcode_s;
@@ -63,6 +65,13 @@ WordDecoder::WordDecoder(const ArchDef &arch) {
shift_j_u_immed = opcode_s + reg_s; shift_j_u_immed = opcode_s + reg_s;
shift_s_b_immed = opcode_s + reg_s + func3_s + reg_s + reg_s; shift_s_b_immed = opcode_s + reg_s + func3_s + reg_s + reg_s;
shift_i_immed = opcode_s + reg_s + func3_s + reg_s; shift_i_immed = opcode_s + reg_s + func3_s + reg_s;
shift_vset_immed = opcode_s + reg_s + func3_s + reg_s;
shift_vmask = opcode_s + reg_s + func3_s + reg_s + reg_s;
shift_vmop = opcode_s + reg_s + func3_s + reg_s + reg_s + vmask_s;
shift_vnf = opcode_s + reg_s + func3_s + reg_s + reg_s + vmask_s + mop_s;
shift_func6 = opcode_s + reg_s + func3_s + reg_s + reg_s + 1;
shift_vset = opcode_s + reg_s + func3_s + reg_s + reg_s + 6;
reg_mask = 0x1f; reg_mask = 0x1f;
func3_mask = 0x7; func3_mask = 0x7;
@@ -73,6 +82,8 @@ WordDecoder::WordDecoder(const ArchDef &arch) {
b_immed_mask = 0x1fff; b_immed_mask = 0x1fff;
u_immed_mask = 0xfffff; u_immed_mask = 0xfffff;
j_immed_mask = 0xfffff; j_immed_mask = 0xfffff;
v_immed_mask = 0x7ff;
func6_mask = 0x3f;
} }
@@ -215,7 +226,84 @@ Instruction *WordDecoder::decode(const std::vector<Byte> &v, Size &idx, trace_in
trace_inst->rd = ((code>>shift_rd) & reg_mask); trace_inst->rd = ((code>>shift_rd) & reg_mask);
break; break;
defualt:
case InstType::V_TYPE:
cout << "Entered here: instr type = vector" << op << endl;
switch(op) {
case Opcode::VSET_ARITH: //TODO: arithmetic ops
inst.setDestReg((code>>shift_rd) & reg_mask);
inst.setSrcReg((code>>shift_rs1) & reg_mask);
func3 = (code>>shift_func3) & func3_mask;
inst.setFunc3 (func3);
cout << "Entered here: instr type = vector" << endl;
if(func3 == 7) {
cout << "Entered here: imm instr";
inst.setVsetImm(!(code>>shift_vset));
if(inst.getVsetImm()) {
Word immed = (code>>shift_rs2) & v_immed_mask;
D(3, "immed" << immed);
inst.setSrcImm(immed); //TODO
inst.setvlmul(immed & 0x3);
D(3, "lmul " << (immed & 0x3));
inst.setvediv((immed>>4) & 0x3);
D(3, "ediv " << ((immed>>4) & 0x3));
inst.setvsew((immed>>2) & 0x3);
D(3, "sew " << ((immed>>2) & 0x3));
}
else {
inst.setSrcReg((code>>shift_rs2) & reg_mask);
trace_inst->rs2 = ((code>>shift_rs2) & reg_mask);
}
trace_inst->valid_inst = true;
trace_inst->rs1 = ((code>>shift_rs1) & reg_mask);
trace_inst->rd = ((code>>shift_rd) & reg_mask);
} else {
inst.setSrcReg((code>>shift_rs2) & reg_mask);
inst.setVmask((code>>shift_vmask) & 0x1);
inst.setFunc6((code>>shift_func6) & func6_mask);
trace_inst->valid_inst = true;
trace_inst->rs1 = ((code>>shift_rs1) & reg_mask);
trace_inst->rs2 = ((code>>shift_rs2) & reg_mask);
trace_inst->rd = ((code>>shift_rd) & reg_mask);
}
break;
case Opcode::VL:
D(3, "vector load instr");
inst.setDestReg((code>>shift_rd) & reg_mask);
inst.setSrcReg((code>>shift_rs1) & reg_mask);
inst.setVlsWidth((code>>shift_func3) & func3_mask);
inst.setSrcReg((code>>shift_rs2) & reg_mask);
inst.setVmask((code>>shift_vmask));
inst.setVmop((code>>shift_vmop) && func3_mask);
inst.setVnf((code>>shift_vnf) && func3_mask);
trace_inst->valid_inst = true;
trace_inst->rs1 = ((code>>shift_rs1) & reg_mask);
trace_inst->rd = ((code>>shift_rd) & reg_mask);
trace_inst->rs2 = ((code>>shift_rs2) & reg_mask);
break;
case Opcode::VS:
inst.setVs3((code>>shift_rd) & reg_mask);
inst.setSrcReg((code>>shift_rs1) & reg_mask);
inst.setVlsWidth((code>>shift_func3) & func3_mask);
inst.setSrcReg((code>>shift_rs2) & reg_mask);
inst.setVmask((code>>shift_vmask));
inst.setVmop((code>>shift_vmop) && func3_mask);
inst.setVnf((code>>shift_vnf) && func3_mask);
trace_inst->valid_inst = true;
trace_inst->rs1 = ((code>>shift_rs1) & reg_mask);
trace_inst->rd = ((code>>shift_rd) & reg_mask);
trace_inst->rs2 = ((code>>shift_rs2) & reg_mask);
break;
}
break;
default:
cout << "Unrecognized argument class in word decoder.\n"; cout << "Unrecognized argument class in word decoder.\n";
exit(1); exit(1);
} }

View File

@@ -37,6 +37,8 @@ namespace Harp {
public: public:
Reg(): cpuId(0), regNum(0), val(0) {} Reg(): cpuId(0), regNum(0), val(0) {}
Reg(Word c, Word n): cpuId(c), regNum(n), val(0) {} Reg(Word c, Word n): cpuId(c), regNum(n), val(0) {}
Reg(Word c, Word n, T v): cpuId(c), regNum(n), val(v) {}
Reg &operator=(T r) { if (regNum) {val = r; doWrite();} return *this; } Reg &operator=(T r) { if (regNum) {val = r; doWrite();} return *this; }
@@ -47,9 +49,10 @@ namespace Harp {
val &= mask; val &= mask;
} }
T val;
private: private:
Word cpuId, regNum; Word cpuId, regNum;
T val; // T val;
#ifdef EMU_INSTRUMENTATION #ifdef EMU_INSTRUMENTATION
/* Access size here is 8, representing the register size of 64-bit cores. */ /* Access size here is 8, representing the register size of 64-bit cores. */
@@ -86,6 +89,14 @@ namespace Harp {
Word pc; Word pc;
}; };
struct vtype
{
int vill;
int vediv;
int vsew;
int vlmul;
};
class Warp; class Warp;
class Core { class Core {
@@ -172,6 +183,13 @@ namespace Harp {
std::vector<Word> shadowReg; std::vector<Word> shadowReg;
std::vector<bool> shadowPReg; std::vector<bool> shadowPReg;
//Vector CSR
struct vtype vtype; //both of them are XLEN WIDE
int vl; //both of them are XLEN WIDE
Word VLEN; //Total vector length
std::vector<std::vector<Reg<char*>>> vreg; // 32 vector registers
bool interruptEnable, shadowInterruptEnable, supervisorMode, bool interruptEnable, shadowInterruptEnable, supervisorMode,
shadowSupervisorMode, spawned; shadowSupervisorMode, spawned;

View File

@@ -5,14 +5,14 @@
#define __DEBUG_H #define __DEBUG_H
// #define USE_DEBUG 9 // #define USE_DEBUG 9
#define USE_DEBUG -1 #define USE_DEBUG 3
#ifdef USE_DEBUG #ifdef USE_DEBUG
#include <iostream> #include <iostream>
#define D(lvl, x) do { \ #define D(lvl, x) do { \
using namespace std; \ using namespace std; \
if ((lvl) <= USE_DEBUG) { \ if ((lvl) == USE_DEBUG) { \
cout << "DEBUG " << __FILE__ << ':' << dec << __LINE__ << ": " \ cout << "DEBUG " << __FILE__ << ':' << dec << __LINE__ << ": " \
<< x << endl; \ << x << endl; \
} \ } \

View File

@@ -60,11 +60,15 @@ namespace Harp {
Size inst_s, opcode_s, reg_s, func3_s; Size inst_s, opcode_s, reg_s, func3_s;
Size shift_opcode, shift_rd, shift_rs1, shift_rs2, shift_func3, shift_func7; Size shift_opcode, shift_rd, shift_rs1, shift_rs2, shift_func3, shift_func7;
Size shift_j_u_immed, shift_s_b_immed, shift_i_immed; Size shift_j_u_immed, shift_s_b_immed, shift_i_immed;
//Vector
Size shift_vset, shift_vset_immed, shift_vmask, shift_vmop, shift_vnf, shift_func6;
Size vmask_s, mop_s;
Word reg_mask, func3_mask, func7_mask, opcode_mask, i_immed_mask, Word reg_mask, func3_mask, func7_mask, opcode_mask, i_immed_mask,
s_immed_mask, b_immed_mask, u_immed_mask, j_immed_mask; s_immed_mask, b_immed_mask, u_immed_mask, j_immed_mask, v_immed_mask, func6_mask;
}; };

View File

@@ -81,7 +81,7 @@ namespace Harp {
bool sign(d < 0); bool sign(d < 0);
bool inf(isinf(d)), zero(d == 0.0); bool inf(std::isinf(d)), zero(d == 0.0);
int exp; int exp;
if (!inf && !zero) exp = floor(log2(fabs(d))); if (!inf && !zero) exp = floor(log2(fabs(d)));

View File

@@ -6,6 +6,7 @@
#include <map> #include <map>
#include <iostream> #include <iostream>
#include <math.h>
#include "types.h" #include "types.h"
#include "trace.h" #include "trace.h"
@@ -29,10 +30,13 @@ namespace Harp {
TRAP = 0x7f, TRAP = 0x7f,
FENCE = 0x0f, FENCE = 0x0f,
PJ_INST = 0x7b, PJ_INST = 0x7b,
GPGPU = 0x6b GPGPU = 0x6b,
VSET_ARITH = 0x57,
VL = 0x7,
VS = 0x27,
}; };
enum InstType { N_TYPE, R_TYPE, I_TYPE, S_TYPE, B_TYPE, U_TYPE, J_TYPE}; enum InstType { N_TYPE, R_TYPE, I_TYPE, S_TYPE, B_TYPE, U_TYPE, J_TYPE, V_TYPE};
// We build a table of instruction information out of this. // We build a table of instruction information out of this.
struct InstTableEntry_t { struct InstTableEntry_t {
@@ -58,7 +62,10 @@ namespace Harp {
{Opcode::TRAP, {"TRAP" , true , false, false, false, InstType::I_TYPE }}, {Opcode::TRAP, {"TRAP" , true , false, false, false, InstType::I_TYPE }},
{Opcode::FENCE, {"fence" , true , false, false, false, InstType::I_TYPE }}, {Opcode::FENCE, {"fence" , true , false, false, false, InstType::I_TYPE }},
{Opcode::PJ_INST, {"pred j", true , false, false, false, InstType::R_TYPE }}, {Opcode::PJ_INST, {"pred j", true , false, false, false, InstType::R_TYPE }},
{Opcode::GPGPU, {"gpgpu" , false, false, false, false, InstType::R_TYPE }} {Opcode::GPGPU, {"gpgpu" , false, false, false, false, InstType::R_TYPE }},
{Opcode::VSET_ARITH, {"vsetvl" , false, false, false, false, InstType::V_TYPE }},
{Opcode::VL, {"vl" , false, false, false, false, InstType::V_TYPE }},
{Opcode::VS, {"vs" , false, false, false, false, InstType::V_TYPE }}
}; };
static const Size MAX_REG_SOURCES(3); static const Size MAX_REG_SOURCES(3);
@@ -94,6 +101,16 @@ namespace Harp {
Word *setSrcImm () { immsrcPresent = true; immsrc = 0xa5; return &immsrc;} Word *setSrcImm () { immsrcPresent = true; immsrc = 0xa5; return &immsrc;}
void setSrcImm (Word srcImm) { immsrcPresent = true; immsrc = srcImm; } void setSrcImm (Word srcImm) { immsrcPresent = true; immsrc = srcImm; }
void setImmRef (Ref &r) { refLiteral = &r; } void setImmRef (Ref &r) { refLiteral = &r; }
void setVsetImm (Word vset_imm) { if(vset_imm) vsetImm = true; else vsetImm = false; }
void setVlsWidth (Word width) { vlsWidth = width; }
void setVmop( Word mop) { vMop = mop; }
void setVnf(Word nf) { vNf = nf; }
void setVmask(Word mask) { vmask = mask; }
void setVs3(Word vs) { vs3 = vs; }
void setvlmul(Word lmul) { vlmul = pow(2, lmul); }
void setvsew(Word sew) { vsew = pow(2, 3+sew); }
void setvediv(Word ediv) { vediv = pow(2,ediv); }
void setFunc6(Word func6) { this->func6 = func6; }
/* Getters used by encoders. */ /* Getters used by encoders. */
Opcode getOpcode() const { return op; } Opcode getOpcode() const { return op; }
@@ -111,6 +128,16 @@ namespace Harp {
Word getImm() const { return immsrc; } Word getImm() const { return immsrc; }
bool hasRefLiteral() const { return refLiteral != NULL; } bool hasRefLiteral() const { return refLiteral != NULL; }
Ref *getRefLiteral() const { return refLiteral; } Ref *getRefLiteral() const { return refLiteral; }
bool getVsetImm() const { return vsetImm; }
Word getVlsWidth() const { return vlsWidth; }
Word getVmop() const { return vMop; }
Word getvNf() const { return vNf; }
bool getVmask() const { return vmask; }
Word getVs3() const { return vs3; }
Word getvlmul() const { return vlmul; }
Word getvsew() const { return vsew; }
Word getvediv() const { return vediv; }
/* Getters used as table lookup. */ /* Getters used as table lookup. */
bool hasRelImm() const { return (*(instTable.find(op))).second.relAddress; } bool hasRelImm() const { return (*(instTable.find(op))).second.relAddress; }
@@ -129,6 +156,10 @@ namespace Harp {
RegNum rdest, pdest; RegNum rdest, pdest;
Ref *refLiteral; Ref *refLiteral;
//Vector
bool vsetImm, vmask;
Word vlsWidth, vMop, vNf, vs3, vlmul, vsew, vediv, func6;
public: public:

View File

@@ -358,12 +358,14 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
} }
bool is_vec = false;
Size nextActiveThreads = c.activeThreads; Size nextActiveThreads = c.activeThreads;
Size wordSz = c.core->a.getWordSize(); Size wordSz = c.core->a.getWordSize();
Word nextPc = c.pc; Word nextPc = c.pc;
Word VLMAX;
c.memAccesses.clear(); c.memAccesses.clear();
@@ -1085,6 +1087,502 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
cout << "ERROR: UNSUPPORTED GPGPU INSTRUCTION " << *this << "\n"; cout << "ERROR: UNSUPPORTED GPGPU INSTRUCTION " << *this << "\n";
} }
break; break;
case VSET_ARITH:
D(3,"VSET_ARITH");
is_vec = true;
switch(func3) {
case 0: // vector-vector
switch(func6)
{
case 0:
{
is_vec = true;
D(3, "Addition " << rsrc[0] << " " << rsrc[1] << " Dest:" << rdest);
vector<Reg<char *>> vr1 = c.vreg[rsrc[0]];
vector<Reg<char *>> vr2 = c.vreg[rsrc[1]];
vector<Reg<char *>> vd = c.vreg[rdest];
if (c.vtype.vsew == 8)
{
} else if (c.vtype.vsew == 16)
{
} else if (c.vtype.vsew == 32)
{
cout << "Doing 32 bit vector addition\n";
for (Word i = 0; i < c.vl; i++)
{
int * first_ptr = (int *) vr1[i].val;
int * second_ptr = (int *) vr2[i].val;
int result = *first_ptr + *second_ptr;
cout << "Adding " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
int * result_ptr = (int *) vd[i].val;
*result_ptr = result;
}
}
D(3, "Vector Register state after addition:");
for(int i=0; i < c.vreg.size(); i++)
for(int j=0; j< c.vreg[0].size(); j++)
{
if (c.vtype.vsew == 8)
{
uint8_t * ptr_val = (uint8_t *) c.vreg[i][j].val;
std::cout << "reg[" << i << "][" << j << "] = " << *ptr_val << std::endl;
} else if (c.vtype.vsew == 16)
{
uint16_t * ptr_val = (uint16_t *) c.vreg[i][j].val;
std::cout << "reg[" << i << "][" << j << "] = " << *ptr_val << std::endl;
} else if (c.vtype.vsew == 32)
{
uint32_t * ptr_val = (uint32_t *) c.vreg[i][j].val;
std::cout << "reg[" << i << "][" << j << "] = " << *ptr_val << std::endl;
}
}
}
break;
case 24: //vmseq
{
vector<Reg<char *>> vr1 = c.vreg[rsrc[0]];
vector<Reg<char *>> vr2 = c.vreg[rsrc[1]];
vector<Reg<char *>> vd = c.vreg[rdest];
if(c.vtype.vsew == 8){
for(uint8_t i = 0; i < c.vl; i++){
uint8_t *first_ptr = (uint8_t *)vr1[i].val;
uint8_t *second_ptr = (uint8_t *)vr2[i].val;
uint8_t result = (*first_ptr == *second_ptr) ? 1 : 0;
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint8_t * result_ptr = (uint8_t *) vd[i].val;
*result_ptr = result;
}
} else if(c.vtype.vsew == 16) {
for(uint16_t i = 0; i < c.vl; i++){
uint16_t *first_ptr = (uint16_t *)vr1[i].val;
uint16_t *second_ptr = (uint16_t *)vr2[i].val;
uint16_t result = (*first_ptr == *second_ptr) ? 1 : 0;
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint16_t * result_ptr = (uint16_t *) vd[i].val;
*result_ptr = result;
}
} else if(c.vtype.vsew == 32) {
for(uint32_t i = 0; i < c.vl; i++){
uint32_t *first_ptr = (uint32_t *)vr1[i].val;
uint32_t *second_ptr = (uint32_t *)vr2[i].val;
uint32_t result = (*first_ptr == *second_ptr) ? 1 : 0;
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint32_t * result_ptr = (uint32_t *) vd[i].val;
*result_ptr = result;
}
}
}
break;
case 25: //vmsne
{
vector<Reg<char *>> vr1 = c.vreg[rsrc[0]];
vector<Reg<char *>> vr2 = c.vreg[rsrc[1]];
vector<Reg<char *>> vd = c.vreg[rdest];
if(c.vtype.vsew == 8){
for(uint8_t i = 0; i < c.vl; i++){
uint8_t *first_ptr = (uint8_t *)vr1[i].val;
uint8_t *second_ptr = (uint8_t *)vr2[i].val;
uint8_t result = (*first_ptr != *second_ptr) ? 1 : 0;
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint8_t * result_ptr = (uint8_t *) vd[i].val;
*result_ptr = result;
}
} else if(c.vtype.vsew == 16) {
for(uint16_t i = 0; i < c.vl; i++){
uint16_t *first_ptr = (uint16_t *)vr1[i].val;
uint16_t *second_ptr = (uint16_t *)vr2[i].val;
uint16_t result = (*first_ptr != *second_ptr) ? 1 : 0;
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint16_t * result_ptr = (uint16_t *) vd[i].val;
*result_ptr = result;
}
} else if(c.vtype.vsew == 32) {
for(uint32_t i = 0; i < c.vl; i++){
uint32_t *first_ptr = (uint32_t *)vr1[i].val;
uint32_t *second_ptr = (uint32_t *)vr2[i].val;
uint32_t result = (*first_ptr != *second_ptr) ? 1 : 0;
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint32_t * result_ptr = (uint32_t *) vd[i].val;
*result_ptr = result;
}
}
}
break;
case 26: //vmsltu
{
vector<Reg<char *>> vr1 = c.vreg[rsrc[0]];
vector<Reg<char *>> vr2 = c.vreg[rsrc[1]];
vector<Reg<char *>> vd = c.vreg[rdest];
if(c.vtype.vsew == 8){
for(uint8_t i = 0; i < c.vl; i++){
uint8_t *first_ptr = (uint8_t *)vr1[i].val;
uint8_t *second_ptr = (uint8_t *)vr2[i].val;
uint8_t result = (*first_ptr < *second_ptr) ? 1 : 0;
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint8_t * result_ptr = (uint8_t *) vd[i].val;
*result_ptr = result;
}
} else if(c.vtype.vsew == 16) {
for(uint16_t i = 0; i < c.vl; i++){
uint16_t *first_ptr = (uint16_t *)vr1[i].val;
uint16_t *second_ptr = (uint16_t *)vr2[i].val;
uint16_t result = (*first_ptr < *second_ptr) ? 1 : 0;
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint16_t * result_ptr = (uint16_t *) vd[i].val;
*result_ptr = result;
}
} else if(c.vtype.vsew == 32) {
for(uint32_t i = 0; i < c.vl; i++){
uint32_t *first_ptr = (uint32_t *)vr1[i].val;
uint32_t *second_ptr = (uint32_t *)vr2[i].val;
uint32_t result = (*first_ptr < *second_ptr) ? 1 : 0;
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint32_t * result_ptr = (uint32_t *) vd[i].val;
*result_ptr = result;
}
}
}
break;
case 27: //vmslt
{
vector<Reg<char *>> vr1 = c.vreg[rsrc[0]];
vector<Reg<char *>> vr2 = c.vreg[rsrc[1]];
vector<Reg<char *>> vd = c.vreg[rdest];
if(c.vtype.vsew == 8){
for(int8_t i = 0; i < c.vl; i++){
int8_t *first_ptr = (int8_t *)vr1[i].val;
int8_t *second_ptr = (int8_t *)vr2[i].val;
int8_t result = (*first_ptr < *second_ptr) ? 1 : 0;
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
int8_t * result_ptr = (int8_t *) vd[i].val;
*result_ptr = result;
}
} else if(c.vtype.vsew == 16) {
for(int16_t i = 0; i < c.vl; i++){
int16_t *first_ptr = (int16_t *)vr1[i].val;
int16_t *second_ptr = (int16_t *)vr2[i].val;
int16_t result = (*first_ptr < *second_ptr) ? 1 : 0;
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
int16_t * result_ptr = (int16_t *) vd[i].val;
*result_ptr = result;
}
} else if(c.vtype.vsew == 32) {
for(int32_t i = 0; i < c.vl; i++){
int32_t *first_ptr = (int32_t *)vr1[i].val;
int32_t *second_ptr = (int32_t *)vr2[i].val;
int32_t result = (*first_ptr < *second_ptr) ? 1 : 0;
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
int32_t * result_ptr = (int32_t *) vd[i].val;
*result_ptr = result;
}
}
}
break;
case 28: //vmsleu
{
vector<Reg<char *>> vr1 = c.vreg[rsrc[0]];
vector<Reg<char *>> vr2 = c.vreg[rsrc[1]];
vector<Reg<char *>> vd = c.vreg[rdest];
if(c.vtype.vsew == 8){
for(uint8_t i = 0; i < c.vl; i++){
uint8_t *first_ptr = (uint8_t *)vr1[i].val;
uint8_t *second_ptr = (uint8_t *)vr2[i].val;
uint8_t result = (*first_ptr <= *second_ptr) ? 1 : 0;
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint8_t * result_ptr = (uint8_t *) vd[i].val;
*result_ptr = result;
}
} else if(c.vtype.vsew == 16) {
for(uint16_t i = 0; i < c.vl; i++){
uint16_t *first_ptr = (uint16_t *)vr1[i].val;
uint16_t *second_ptr = (uint16_t *)vr2[i].val;
uint16_t result = (*first_ptr <= *second_ptr) ? 1 : 0;
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint16_t * result_ptr = (uint16_t *) vd[i].val;
*result_ptr = result;
}
} else if(c.vtype.vsew == 32) {
for(uint32_t i = 0; i < c.vl; i++){
uint32_t *first_ptr = (uint32_t *)vr1[i].val;
uint32_t *second_ptr = (uint32_t *)vr2[i].val;
uint32_t result = (*first_ptr <= *second_ptr) ? 1 : 0;
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint32_t * result_ptr = (uint32_t *) vd[i].val;
*result_ptr = result;
}
}
}
break;
case 29: //vmsle
{
vector<Reg<char *>> vr1 = c.vreg[rsrc[0]];
vector<Reg<char *>> vr2 = c.vreg[rsrc[1]];
vector<Reg<char *>> vd = c.vreg[rdest];
if(c.vtype.vsew == 8){
for(int8_t i = 0; i < c.vl; i++){
int8_t *first_ptr = (int8_t *)vr1[i].val;
int8_t *second_ptr = (int8_t *)vr2[i].val;
int8_t result = (*first_ptr <= *second_ptr) ? 1 : 0;
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
int8_t * result_ptr = (int8_t *) vd[i].val;
*result_ptr = result;
}
} else if(c.vtype.vsew == 16) {
for(int16_t i = 0; i < c.vl; i++){
int16_t *first_ptr = (int16_t *)vr1[i].val;
int16_t *second_ptr = (int16_t *)vr2[i].val;
int16_t result = (*first_ptr <= *second_ptr) ? 1 : 0;
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
int16_t * result_ptr = (int16_t *) vd[i].val;
*result_ptr = result;
}
} else if(c.vtype.vsew == 32) {
for(int32_t i = 0; i < c.vl; i++){
int32_t *first_ptr = (int32_t *)vr1[i].val;
int32_t *second_ptr = (int32_t *)vr2[i].val;
int32_t result = (*first_ptr <= *second_ptr) ? 1 : 0;
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
int32_t * result_ptr = (int32_t *) vd[i].val;
*result_ptr = result;
}
}
}
break;
case 30: //vmsgtu
{
vector<Reg<char *>> vr1 = c.vreg[rsrc[0]];
vector<Reg<char *>> vr2 = c.vreg[rsrc[1]];
vector<Reg<char *>> vd = c.vreg[rdest];
if(c.vtype.vsew == 8){
for(uint8_t i = 0; i < c.vl; i++){
uint8_t *first_ptr = (uint8_t *)vr1[i].val;
uint8_t *second_ptr = (uint8_t *)vr2[i].val;
uint8_t result = (*first_ptr > *second_ptr) ? 1 : 0;
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint8_t * result_ptr = (uint8_t *) vd[i].val;
*result_ptr = result;
}
} else if(c.vtype.vsew == 16) {
for(uint16_t i = 0; i < c.vl; i++){
uint16_t *first_ptr = (uint16_t *)vr1[i].val;
uint16_t *second_ptr = (uint16_t *)vr2[i].val;
uint16_t result = (*first_ptr > *second_ptr) ? 1 : 0;
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint16_t * result_ptr = (uint16_t *) vd[i].val;
*result_ptr = result;
}
} else if(c.vtype.vsew == 32) {
for(uint32_t i = 0; i < c.vl; i++){
uint32_t *first_ptr = (uint32_t *)vr1[i].val;
uint32_t *second_ptr = (uint32_t *)vr2[i].val;
uint32_t result = (*first_ptr > *second_ptr) ? 1 : 0;
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint32_t * result_ptr = (uint32_t *) vd[i].val;
*result_ptr = result;
}
}
}
break;
case 31: //vmsgt
{
vector<Reg<char *>> vr1 = c.vreg[rsrc[0]];
vector<Reg<char *>> vr2 = c.vreg[rsrc[1]];
vector<Reg<char *>> vd = c.vreg[rdest];
if(c.vtype.vsew == 8){
for(int8_t i = 0; i < c.vl; i++){
int8_t *first_ptr = (int8_t *)vr1[i].val;
int8_t *second_ptr = (int8_t *)vr2[i].val;
int8_t result = (*first_ptr > *second_ptr) ? 1 : 0;
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
int8_t * result_ptr = (int8_t *) vd[i].val;
*result_ptr = result;
}
} else if(c.vtype.vsew == 16) {
for(int16_t i = 0; i < c.vl; i++){
int16_t *first_ptr = (int16_t *)vr1[i].val;
int16_t *second_ptr = (int16_t *)vr2[i].val;
int16_t result = (*first_ptr > *second_ptr) ? 1 : 0;
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
int16_t * result_ptr = (int16_t *) vd[i].val;
*result_ptr = result;
}
} else if(c.vtype.vsew == 32) {
for(int32_t i = 0; i < c.vl; i++){
int32_t *first_ptr = (int32_t *)vr1[i].val;
int32_t *second_ptr = (int32_t *)vr2[i].val;
int32_t result = (*first_ptr > *second_ptr) ? 1 : 0;
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
int32_t * result_ptr = (int32_t *) vd[i].val;
*result_ptr = result;
}
}
}
break;
}
break;
case 7:
{
is_vec = true;
c.vtype.vill = 0; //TODO
c.vtype.vediv = vediv;
c.vtype.vsew = vsew;
c.vtype.vlmul = vlmul;
D(3, "lmul:" << vlmul << " sew:" << vsew << " ediv: " << vediv);
Word VLMAX = (vlmul * c.VLEN)/vsew;
if(reg[rsrc[0]] <= VLMAX){
c.vl = reg[rsrc[0]];
}
if(reg[rsrc[0]] >= (2*VLMAX)) {
c.vl = VLMAX;
}
reg[rdest] = c.vl;
D(3, "VL:" << reg[rdest]);
Word regNum(0);
for (int j = 0; j < 32; j++)
{
c.vreg.push_back(vector<Reg<char*>>());
for (int i = 0; i < (c.VLEN/vsew); ++i)
{
int * elem_ptr = (int *) malloc(vsew/8);
for (int f = 0; f < (vsew/32); f++) elem_ptr[f] = 1;
c.vreg[j].push_back(Reg<char*>(c.id, regNum++, (char *) elem_ptr));
}
}
}
break;
}
break;
case VL:
{
is_vec = true;
D(3, "Executing vector load");
VLMAX = (c.vtype.vlmul * c.VLEN)/c.vtype.vsew;
D(3, "lmul: " << c.vtype.vlmul << " VLEN:" << c.VLEN << "sew: " << c.vtype.vsew);
D(3, "src: " << rsrc[0] << " " << reg[rsrc[0]]);
D(3, "dest" << rdest);
D(3, "width" << vlsWidth);
vector<Reg<char *>> vd = c.vreg[rdest];
switch(vlsWidth) {
case 6: //load word and unit strided (not checking for unit stride)
for(Word i = 0; i < c.vl; i++) {
memAddr = ((reg[rsrc[0]]) & 0xFFFFFFFC) + i*c.vtype.vsew;
data_read = c.core->mem.read(memAddr, c.supervisorMode);
D(3, "Data read " << data_read);
int * result_ptr = (int *) vd[i].val;
*result_ptr = data_read;
//trace_inst->is_lw = true;
//trace_inst->mem_addresses[t] = memAddr;
}
for(Word i = c.vl; i < VLMAX; i++){
int * result_ptr = (int *) vd[i].val;
*result_ptr = 0;
}
D(3, "Vector Register state after addition:");
for(int i=0; i < c.vreg.size(); i++)
for(int j=0; j< c.vreg[0].size(); j++)
{
if (c.vtype.vsew == 8)
{
uint8_t * ptr_val = (uint8_t *) c.vreg[i][j].val;
std::cout << "reg[" << i << "][" << j << "] = " << *ptr_val << std::endl;
} else if (c.vtype.vsew == 16)
{
uint16_t * ptr_val = (uint16_t *) c.vreg[i][j].val;
std::cout << "reg[" << i << "][" << j << "] = " << *ptr_val << std::endl;
} else if (c.vtype.vsew == 32)
{
uint32_t * ptr_val = (uint32_t *) c.vreg[i][j].val;
std::cout << "reg[" << i << "][" << j << "] = " << *ptr_val << std::endl;
}
}
break;
}
}
break;
case VS:
is_vec = true;
VLMAX = (c.vtype.vlmul * c.VLEN)/c.vtype.vsew;
for(Word i = 0; i < c.vl; i++) {
++c.stores;
memAddr = reg[rsrc[0]] + i*c.vtype.vsew;
std::cout << "STORE MEM ADDRESS: " << std::hex << memAddr << "\n";
//trace_inst->is_sw = true;
//trace_inst->mem_addresses[t] = memAddr;
switch (vlsWidth)
{
case 6: //store word and unit strided (not checking for unit stride)
{
uint32_t * ptr_val = (uint32_t *) c.vreg[vs3][i].val;
c.core->mem.write(memAddr, *ptr_val, c.supervisorMode, 4);
D(3, "store: " << memAddr << " value:" << *ptr_val);
}
break;
default:
cout << "ERROR: UNSUPPORTED S INST\n";
exit(1);
}
c.memAccesses.push_back(Warp::MemAccess(true, memAddr));
}
break;
default: default:
cout << "pc: " << hex << (c.pc-4) << "\n"; cout << "pc: " << hex << (c.pc-4) << "\n";
cout << "aERROR: Unsupported instruction: " << *this << "\n" << flush; cout << "aERROR: Unsupported instruction: " << *this << "\n" << flush;

2
simX/test_riscv.sh Normal file → Executable file
View File

@@ -3,4 +3,4 @@ echo start > results.txt
# echo ../kernel/vortex_test.hex # echo ../kernel/vortex_test.hex
make make
printf "Fasten your seatbelts ladies and gentelmen!!\n\n\n\n" printf "Fasten your seatbelts ladies and gentelmen!!\n\n\n\n"
cd obj_dir && ./Vcache_simX -E -a rv32i --core /home/fares/Desktop/Vortex/rvvector/basic/vx_vector_main.hex -s -b 1> emulator.debug cd obj_dir && ./Vcache_simX -E -a rv32i --core ../../runtime/mains/vector_test/vx_vector_main.hex -s -b 1> emulator.debug