Vector changes
This commit is contained in:
@@ -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
|
||||
|
||||
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
|
||||
#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
|
||||
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
|
||||
|
||||
@@ -18,7 +21,8 @@ VX_API = ../../vx_api/vx_api.c
|
||||
VX_TEST = ../../tests/tests.c
|
||||
VX_FIO = ../../fileio/fileio.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
|
||||
|
||||
|
||||
@@ -4,4 +4,12 @@
|
||||
.type vx_vec_test, @function
|
||||
.global 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
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
BIN
runtime/mains/vector_test/vx_vector_main.elf
Normal file → Executable file
BIN
runtime/mains/vector_test/vx_vector_main.elf
Normal file → Executable file
Binary file not shown.
@@ -1,224 +1,288 @@
|
||||
:0200000480007A
|
||||
:100000009705000093854507130540006B10B50068
|
||||
:10001000EF004006130510006B00050017250000D7
|
||||
:100020001305C5D917260000130686D93306A64046
|
||||
:1000300093050000EF00806B170500001305855B3A
|
||||
:10004000EF00C056EF00C060130540006B000500D4
|
||||
:08005000EF0080526F00C05662
|
||||
:10005800B70700009387070063880700370500800B
|
||||
:100068001305055F6F00005467800000130540000A
|
||||
:100078006B0005009721000093814110F3261002C0
|
||||
:100088009396A601732600029315A6001316260060
|
||||
:1000980037F1FF6F3301B1403301D1403301C10063
|
||||
:1000A800F326100263860600130500006B000500A6
|
||||
:1000B8006780000067800000130101FD232681028C
|
||||
:1000C80013040103232EA4FC232CB4FC232AC4FC10
|
||||
:1000D8008327C4FD83A707002326F4FE832744FD56
|
||||
:1000E8002322F4FE832744FE03C707008327C4FEA8
|
||||
:1000F8002380E7008327C4FE93871700032744FE65
|
||||
:10010800034717002380E7008327C4FE938727004F
|
||||
:10011800032744FE034727002380E7008327C4FE04
|
||||
:1001280093873700032744FE034737002380E700FF
|
||||
:100138008327C4FE938747002326F4FE232404FE66
|
||||
:100148006F004003832784FE032784FDB307F7006D
|
||||
:1001580003C707008327C4FE2380E7008327C4FE64
|
||||
:10016800938717002326F4FE832784FE93871700BE
|
||||
:100178002324F4FE032784FE832744FDE344F7FC8D
|
||||
:100188008327C4FD0327C4FE23A0E7001300000053
|
||||
:100198000324C1021301010367800000130101FD5C
|
||||
:1001A8002326810213040103232EA4FC232CB4FC70
|
||||
:1001B8008327C4FD83A707002326F4FE832744FE74
|
||||
:1001C8002320F4FE8327C4FE03C70700832704FE09
|
||||
:1001D8002380E700832704FE938717000327C4FEC4
|
||||
:1001E800034717002380E700832704FE938727002F
|
||||
:1001F8000327C4FE034727002380E700832704FE64
|
||||
:10020800938737000327C4FE034737002380E7009E
|
||||
:100218008327C4FE938747002326F4FE232404FE85
|
||||
:100228006F004003832784FE032784FDB307F7008C
|
||||
:100238000327C4FE034707002380E7008327C4FE83
|
||||
:10024800938717002326F4FE832784FE93871700DD
|
||||
:100258002324F4FE032784FE832744FEE344F7FCAB
|
||||
:100268008327C4FD0327C4FE23A0E7001300000072
|
||||
:100278000324C1021301010367800000130101FF79
|
||||
:100288002326810013040101130000000324C10088
|
||||
:100298001301010167800000130101FE232E810074
|
||||
:1002A800130401022326A4FE2324B4FE832784FE1C
|
||||
:1002B8003727000023A2E7009307000013850700F3
|
||||
:1002C8000324C1011301010267800000130101FE2C
|
||||
:1002D800232E8100130401022326A4FE9307100095
|
||||
:1002E800138507000324C101130101026780000080
|
||||
:1002F800130101FF232681001304010113000000EC
|
||||
:100308000324C1001301010167800000130101FFEC
|
||||
:100318002326810013040101130000000324C100F7
|
||||
:100328001301010167800000130101FD23268102EA
|
||||
:1003380013040103232EA4FC232CB4FC232AC4FC9D
|
||||
:10034800B70701002324F4FE232604FE6F00C00231
|
||||
:100358008327C4FE032784FDB307F70083C707007C
|
||||
:1003680013870700832784FE23A0E7008327C4FEA2
|
||||
:10037800938717002326F4FE0327C4FE832744FD32
|
||||
:10038800E348F7FC832744FD138507000324C102D3
|
||||
:100398001301010367800000130101FD2326810278
|
||||
:1003A80013040103232EA4FC8327C4FD63D807008C
|
||||
:1003B8008327C4FDB307F040232EF4FC0327C4FDB4
|
||||
:1003C800B73700009387078063D8E700B737000086
|
||||
:1003D80093870780232EF4FC83A701C32326F4FE0A
|
||||
:1003E80003A701C38327C4FD3307F70023A8E1C28D
|
||||
:1003F8008327C4FE138507000324C10213010103E8
|
||||
:1004080067800000130101FE232E1100232C8100B8
|
||||
:10041800130401022326A4FE13050000EF00400E7A
|
||||
:10042800130000008320C10103248101130101028C
|
||||
:1004380067800000130101FF2326810013040101D6
|
||||
:10044800130000000324C1001301010167800000AC
|
||||
:10045800130101FF2326810013040101130000008A
|
||||
:100468000324C1001301010167800000130101FF8B
|
||||
:10047800232611002324810013040101EF00C00A80
|
||||
:1004880093070500138507008320C100032481001A
|
||||
:100498001301010167800000130101FF2326810079
|
||||
:1004A80013040101130000000324C100130101011A
|
||||
:1004B80067800000130101FF232681001304010156
|
||||
:1004C80083A781C39386170023ACD1C21385070085
|
||||
:1004D8000324C1001301010167800000130101FF1B
|
||||
:1004E8002326810013040101130000000324C10026
|
||||
:1004F80013010101678000006B10B50067800000E0
|
||||
:100508006B000500678000006B40B5006780000045
|
||||
:100518006B200500678000006B30000067800000DA
|
||||
:1005280073251002678000007325000267800000B1
|
||||
:10053800130540006B000500F32610029396F600A1
|
||||
:10054800732600029315A6001316260037F1FF6FD5
|
||||
:100558003301B1403301D1403301C100F326100209
|
||||
:1005680063860600130500006B0005006780000025
|
||||
:10057800130101FF23261100232481001304010124
|
||||
:1005880013051000EFF0DFF7EFF0DFB21300000003
|
||||
:10059800138507008320C100032481001301010192
|
||||
:1005A800678000009305050093060000130600000D
|
||||
:1005B800130500006F00C020130101FF9305000020
|
||||
:1005C800232481002326110013040500EF00C0280E
|
||||
:1005D80003A581C28327C50363840700E78007005A
|
||||
:1005E80013050400EFF01FE2130101FF232481002B
|
||||
:1005F8002322910037240080B72400809387C49772
|
||||
:100608001304C4973304F4402326110013542440E0
|
||||
:1006180063020402931424009384C4FFB384F40097
|
||||
:1006280083A704001304F4FF9384C4FFE780070042
|
||||
:10063800E31804FE8320C1000324810083244100C1
|
||||
:100648001301010167800000130101FF23248100C9
|
||||
:1006580023202101372400803729008093078497BD
|
||||
:10066800130989973309F9402326110023229100A1
|
||||
:100678001359294063000902130484979304000066
|
||||
:10068800832704009384140013044400E7800700C0
|
||||
:10069800E31899FE37240080372900809307849750
|
||||
:1006A8001309C9973309F94013592940630009020E
|
||||
:1006B8001304849793040000832704009384140090
|
||||
:1006C80013044400E7800700E31899FE8320C10063
|
||||
:1006D800032481008324410003290100130101013F
|
||||
:1006E800678000001303F00013070500637EC30250
|
||||
:1006F8009377F7006390070A63920508937606FFDD
|
||||
:100708001376F600B386E6002320B7002322B7004D
|
||||
:100718002324B7002326B70013070701E366D7FE93
|
||||
:100728006314060067800000B306C3409396260052
|
||||
:1007380097020000B38656006780C6002307B700FB
|
||||
:10074800A306B7002306B700A305B7002305B70023
|
||||
:10075800A304B7002304B700A303B7002303B7001B
|
||||
:10076800A302B7002302B700A301B7002301B70013
|
||||
:10077800A300B7002300B7006780000093F5F50FCA
|
||||
:1007880093968500B3E5D50093960501B3E5D500AA
|
||||
:100798006FF0DFF69396270097020000B3865600A5
|
||||
:1007A80093820000E78006FA93800200938707FF90
|
||||
:1007B8003307F7403306F600E378C3F66FF0DFF34C
|
||||
:1007C80003A781C283278714638C070403A7470004
|
||||
:1007D8001308F001634EE8061318270063060502A4
|
||||
:1007E800338307012324C30883A88718130610003E
|
||||
:1007F8003316E600B3E8C80023A417192324D3103E
|
||||
:10080800930620006304D5021307170023A2E7000C
|
||||
:10081800B387070123A4B700130500006780000011
|
||||
:100828009307C7142324F7146FF05FFA83A6C71839
|
||||
:100838001307170023A2E70033E6C60023A6C7184C
|
||||
:10084800B387070123A4B7001305000067800000E1
|
||||
:100858001305F0FF67800000130101FD23248101C7
|
||||
:1008680003AC81C2232E3101232C4101232A5101DB
|
||||
:1008780023286101232611022324810223229102C5
|
||||
:100888002320210323267101930A0500138B0500F9
|
||||
:10089800130A10009309F0FF03298C146308090256
|
||||
:1008A800832449001384F4FF6342040293942400D0
|
||||
:1008B800B304990063040B0483A74410638067059D
|
||||
:1008C8001304F4FF9384C4FFE31634FF8320C102AA
|
||||
:1008D8000324810283244102032901028329C101DF
|
||||
:1008E800032A8101832A4101032B0101832BC100C3
|
||||
:1008F800032C81001301010367800000832749004E
|
||||
:1009080083A644009387F7FF638A870423A2040021
|
||||
:10091800E38806FA8327891833178A00832B49004E
|
||||
:10092800B377F700639E0700E78006008327490036
|
||||
:10093800E39477F783278C14E38427F96FF0DFF5C6
|
||||
:100948008327C91883A544083377F700631C070079
|
||||
:1009580013850A00E78006006FF05FFD23228900F7
|
||||
:100968006FF01FFB13850500E78006006FF01FFC82
|
||||
:041978005800008093
|
||||
:10198000000000006C1C0080D41C00803C1D008006
|
||||
:101990000000000000000000000000000000000047
|
||||
:1019A0000000000000000000000000000000000037
|
||||
:1019B0000000000000000000000000000000000027
|
||||
:1019C0000000000000000000000000000000000017
|
||||
:1019D0000000000000000000000000000000000007
|
||||
:1019E00000000000000000000000000000000000F7
|
||||
:1019F00000000000000000000000000000000000E7
|
||||
:101A000000000000000000000000000000000000D6
|
||||
:101A100000000000000000000000000000000000C6
|
||||
:101A200000000000000000000100000000000000B5
|
||||
:101A30000E33CDAB34126DE6ECDE05000B0000007A
|
||||
:101A40000000000000000000000000000000000096
|
||||
:101A50000000000000000000000000000000000086
|
||||
:101A60000000000000000000000000000000000076
|
||||
:101A70000000000000000000000000000000000066
|
||||
:101A80000000000000000000000000000000000056
|
||||
:101A90000000000000000000000000000000000046
|
||||
:101AA0000000000000000000000000000000000036
|
||||
:101AB0000000000000000000000000000000000026
|
||||
:101AC0000000000000000000000000000000000016
|
||||
:101AD0000000000000000000000000000000000006
|
||||
:101AE00000000000000000000000000000000000F6
|
||||
:101AF00000000000000000000000000000000000E6
|
||||
:101B000000000000000000000000000000000000D5
|
||||
:101B100000000000000000000000000000000000C5
|
||||
:101B200000000000000000000000000000000000B5
|
||||
:101B300000000000000000000000000000000000A5
|
||||
:101B40000000000000000000000000000000000095
|
||||
:101B50000000000000000000000000000000000085
|
||||
:101B60000000000000000000000000000000000075
|
||||
:101B70000000000000000000000000000000000065
|
||||
:101B80000000000000000000000000000000000055
|
||||
:101B90000000000000000000000000000000000045
|
||||
:101BA0000000000000000000000000000000000035
|
||||
:101BB0000000000000000000000000000000000025
|
||||
:101BC0000000000000000000000000000000000015
|
||||
:101BD0000000000000000000000000000000000005
|
||||
:101BE00000000000000000000000000000000000F5
|
||||
:101BF00000000000000000000000000000000000E5
|
||||
:101C000000000000000000000000000000000000D4
|
||||
:101C100000000000000000000000000000000000C4
|
||||
:101C200000000000000000000000000000000000B4
|
||||
:101C300000000000000000000000000000000000A4
|
||||
:101C40000000000000000000000000000000000094
|
||||
:101C50000000000000000000000000000000000084
|
||||
:101C60000000000000000000000000000000000074
|
||||
:101C70000000000000000000000000000000000064
|
||||
:101C80000000000000000000000000000000000054
|
||||
:101C90000000000000000000000000000000000044
|
||||
:101CA0000000000000000000000000000000000034
|
||||
:101CB0000000000000000000000000000000000024
|
||||
:101CC0000000000000000000000000000000000014
|
||||
:101CD0000000000000000000000000000000000004
|
||||
:101CE00000000000000000000000000000000000F4
|
||||
:101CF00000000000000000000000000000000000E4
|
||||
:101D000000000000000000000000000000000000D3
|
||||
:101D100000000000000000000000000000000000C3
|
||||
:101D200000000000000000000000000000000000B3
|
||||
:101D300000000000000000000000000000000000A3
|
||||
:101D40000000000000000000000000000000000093
|
||||
:101D50000000000000000000000000000000000083
|
||||
:101D60000000000000000000000000000000000073
|
||||
:101D70000000000000000000000000000000000063
|
||||
:101D80000000000000000000000000000000000053
|
||||
:101D90000000000000000000000000000000000043
|
||||
:081DA00000000000000000003B
|
||||
:101DA8008019008000000070000000100000002072
|
||||
:10000000970500009385C506130540006B10B500E9
|
||||
:10001000EF00C005130510006B000500138581C3B8
|
||||
:100020001386C1C33306A64093050000EF00901D60
|
||||
:10003000171500001305858DEF00D008EF00D012D2
|
||||
:10004000130540006B000500EF0010046F00D0089E
|
||||
:10005000B707000093870700638807003715008003
|
||||
:10006000130585906F00100667800000130540009F
|
||||
:100070006B0005009711000093814179F32610026F
|
||||
:100080009396A601732600029315A6001316260068
|
||||
:1000900037F1FF6F3301B1403301D1403301C1006B
|
||||
:1000A000F326100263860600130500006B000500AE
|
||||
:1000B0006780000013052000D77285001305A0009B
|
||||
:1000C00023A0A50023A0A50207E005125700000207
|
||||
:1000D00027E0050267800000130101FD232681024D
|
||||
:1000E00013040103232EA4FC232CB4FC232AC4FCF8
|
||||
:1000F0008327C4FD83A707002326F4FE930744FD4E
|
||||
:100100002322F4FE832744FE03C707008327C4FE8F
|
||||
:100110002380E7008327C4FE93871700032744FE4C
|
||||
:10012000034717002380E7008327C4FE9387270037
|
||||
:10013000032744FE034727002380E7008327C4FEEC
|
||||
:1001400093873700032744FE034737002380E700E7
|
||||
:100150008327C4FE938747002326F4FE232404FE4E
|
||||
:100160006F004003832784FE032784FDB307F70055
|
||||
:1001700003C707008327C4FE2380E7008327C4FE4C
|
||||
:10018000938717002326F4FE832784FE93871700A6
|
||||
:100190002324F4FE832744FD032784FEE344F7FC75
|
||||
:1001A0008327C4FE2320F4FE832704FE93F7370041
|
||||
:1001B000032704FEB307F7002320F4FE832704FE81
|
||||
:1001C0002326F4FE8327C4FD0327C4FE23A0E700F3
|
||||
:1001D000130000000324C102130101036780000023
|
||||
:1001E000130101FC232E8102130401042326A4FC25
|
||||
:1001F0002324B4FC8327C4FC83A707002326F4FE32
|
||||
:100200009307C4FD2322F4FE8327C4FE03C707001F
|
||||
:10021000832744FE2380E700832744FE938717004B
|
||||
:100220000327C4FE034717002380E700832744FE0B
|
||||
:10023000938727000327C4FE034727002380E70096
|
||||
:10024000832744FE938737000327C4FE0347370004
|
||||
:100250002380E7008327C4FE938747002326F4FE0C
|
||||
:10026000232404FE6F004003832784FE032784FCBD
|
||||
:10027000B307F7000327C4FE034707002380E70006
|
||||
:100280008327C4FE938717002326F4FE832784FE6A
|
||||
:10029000938717002324F4FE8327C4FD032784FEDD
|
||||
:1002A000E344F7FC8327C4FE2320F4FE832704FEE7
|
||||
:1002B00093F73700032704FEB307F7002320F4FE6B
|
||||
:1002C000832704FE2326F4FE8327C4FC0327C4FEF1
|
||||
:1002D00023A0E700130000000324C103130101045D
|
||||
:1002E00067800000130101FF232681001304010130
|
||||
:1002F000130000000324C100130101016780000006
|
||||
:10030000130101FE232E8100130401022326A4FE03
|
||||
:100310002324B4FE832784FE3727000023A2E700AE
|
||||
:1003200093070000138507000324C1011301010294
|
||||
:1003300067800000130101FE232E1100232C810091
|
||||
:10034000130401022326A4FEB7170080138507CDEE
|
||||
:10035000EF00C04F93071000138507008320C101F1
|
||||
:10036000032481011301010267800000130101FDD4
|
||||
:10037000232611022324810213040103232EA4FC4B
|
||||
:10038000232CB4FC232AC4FCB70700712326F4FEF7
|
||||
:10039000B70700722324F4FE930730002322F4FEF3
|
||||
:1003A000130744FE9307C4FE13064000930507009D
|
||||
:1003B00013850700EFF05FD21307C4FD9307C4FE57
|
||||
:1003C000130640009305070013850700EFF0DFD008
|
||||
:1003D000130784FD9307C4FE13064000930507002E
|
||||
:1003E00013850700EFF05FCF130744FD9307C4FEAA
|
||||
:1003F000130640009305070013850700EFF0DFCDDB
|
||||
:1004000083A7C1C2E7800700130704FE930784FE99
|
||||
:100410009305070013850700EFF09FDC832704FE98
|
||||
:10042000138507008320C102032481021301010305
|
||||
:1004300067800000130101FD23261102232481029D
|
||||
:1004400013040103232EA4FC232CB4FC232AC4FC94
|
||||
:10045000B70700712324F4FEB70700722326F4FEC9
|
||||
:10046000930740002322F4FE130744FE930784FE03
|
||||
:10047000130640009305070013850700EFF0DFC562
|
||||
:100480001307C4FD930784FE13064000930507007D
|
||||
:1004900013850700EFF05FC4130784FD930784FE04
|
||||
:1004A000130640009305070013850700EFF0DFC235
|
||||
:1004B000130744FD930784FE1306400093050700CD
|
||||
:1004C00013850700EFF05FC183A7C1C2E780070073
|
||||
:1004D000832744FD138507008320C1020324810282
|
||||
:1004E0001301010367800000130101FD232611029F
|
||||
:1004F0002324810213040103232EA4FC232CB4FC27
|
||||
:10050000232AC4FCB70700712326F4FE930750008A
|
||||
:100510002324F4FE130784FE9307C4FE1306400051
|
||||
:100520009305070013850700EFF01FBB1307C4FDF9
|
||||
:100530009307C4FE130640009305070013850700C8
|
||||
:10054000EFF09FB99307C4FE032644FD832584FD85
|
||||
:1005500013850700EFF05FB883A7C1C2E7800700EB
|
||||
:10056000832744FD138507008320C10203248102F1
|
||||
:100570001301010367800000130101FD232681029E
|
||||
:1005800013040103232EA4FC8327C4FD63D80700B2
|
||||
:100590008327C4FDB307F040232EF4FC0327C4FDDA
|
||||
:1005A000B73700009387078063D8E700B7370000AC
|
||||
:1005B00093870780232EF4FC83A701C32326F4FE30
|
||||
:1005C00003A701C38327C4FD3307F70023A8E1C2B3
|
||||
:1005D0008327C4FE138507000324C102130101030E
|
||||
:1005E00067800000130101FE232E1100232C8100DF
|
||||
:1005F000130401022326A4FE13050000EF00001ED1
|
||||
:10060000130000008320C1010324810113010102B2
|
||||
:1006100067800000130101FD2326110223248102BB
|
||||
:1006200013040103232EA4FC232CB4FC232AC4FCB2
|
||||
:10063000B70700712326F4FEB70700722324F4FEE7
|
||||
:10064000930770002322F4FE130744FE9307C4FEB1
|
||||
:10065000130640009305070013850700EFF0DFA79E
|
||||
:100660001307C4FD9307C4FE13064000930507005B
|
||||
:1006700013850700EFF05FA6130784FD9307C4FE00
|
||||
:10068000130640009305070013850700EFF0DFA471
|
||||
:10069000130744FD9307C4FE1306400093050700AB
|
||||
:1006A00013850700EFF05FA383A7C1C2E7800700AF
|
||||
:1006B000130704FE930784FE9305070013850700C4
|
||||
:1006C000EFF01FB2832704FE138507008320C102C9
|
||||
:1006D000032481021301010367800000130101FF5D
|
||||
:1006E000232611002324810013040101B717008081
|
||||
:1006F000138547CEEF008015130000008320C10052
|
||||
:10070000032481001301010167800000130101FF30
|
||||
:10071000232611002324810013040101EF00800E21
|
||||
:1007200093070500138507008320C100032481007F
|
||||
:100730001301010167800000130101FF232611004E
|
||||
:100740002324810013040101B7170080138587D08B
|
||||
:10075000EF00C00F130000008320C10003248100BC
|
||||
:100760001301010167800000130101FF232611001E
|
||||
:100770002324810013040101B71700801385C7D219
|
||||
:10078000EF00C00C83A781C39386170023ACD1C2AE
|
||||
:10079000138507008320C100032481001301010198
|
||||
:1007A00067800000130101FF23261100232481002C
|
||||
:1007B00013040101B7170080138587D5EF000009E6
|
||||
:1007C000130000008320C1000324810013010101F4
|
||||
:1007D000678000006B10B500678000006B000500AB
|
||||
:1007E000678000006B40B500678000006B2005004B
|
||||
:1007F000678000006B3000006780000073251002E6
|
||||
:100800006780000073250002678000001305400028
|
||||
:100810006B000500F32610029396F6007326000283
|
||||
:100820009315A6001316260037F1FF6F3301B14070
|
||||
:100830003301D1403301C100F32610026386060064
|
||||
:10084000130500006B00050067800000130141FFE5
|
||||
:10085000232011002322B100834505006388050091
|
||||
:10086000EF00C001130515006FF01FFF832001008A
|
||||
:10087000832541001301C10067800000B702010019
|
||||
:1008800023A0B20067800000130101FF232611009E
|
||||
:10089000232481001304010113051000EFF01FF45D
|
||||
:1008A000EFF05F8113050000EFF05FF3130000002D
|
||||
:1008B000138507008320C100032481001301010177
|
||||
:1008C00067800000930505009306000013060000F2
|
||||
:1008D000130500006F00C020130101FF9305000005
|
||||
:1008E000232481002326110013040500EF00C028F3
|
||||
:1008F00003A581C28327C50363840700E78007003F
|
||||
:1009000013050400EFF01FCE130101FF2324810023
|
||||
:100910002322910037140080B7140080938744008D
|
||||
:10092000130444003304F4402326110013542440DC
|
||||
:1009300063020402931424009384C4FFB384F4007C
|
||||
:1009400083A704001304F4FF9384C4FFE780070027
|
||||
:10095000E31804FE8320C1000324810083244100A6
|
||||
:100960001301010167800000130101FF23248100AE
|
||||
:1009700023202101371400803719008093070400D9
|
||||
:10098000130909003309F94023261100232291009D
|
||||
:100990001359294063000902130404009304000062
|
||||
:1009A000832704009384140013044400E7800700A5
|
||||
:1009B000E31899FE3714008037190080930704006C
|
||||
:1009C000130949003309F94013592940630009020A
|
||||
:1009D000130404009304000083270400938414008C
|
||||
:1009E00013044400E7800700E31899FE8320C10048
|
||||
:1009F0000324810083244100032901001301010124
|
||||
:100A0000678000001303F00013070500637EC30234
|
||||
:100A10009377F7006390070A63920508937606FFC1
|
||||
:100A20001376F600B386E6002320B7002322B70032
|
||||
:100A30002324B7002326B70013070701E366D7FE78
|
||||
:100A40006314060067800000B306C3409396260037
|
||||
:100A500097020000B38656006780C6002307B700E0
|
||||
:100A6000A306B7002306B700A305B7002305B70008
|
||||
:100A7000A304B7002304B700A303B7002303B70000
|
||||
:100A8000A302B7002302B700A301B7002301B700F8
|
||||
:100A9000A300B7002300B7006780000093F5F50FAF
|
||||
:100AA00093968500B3E5D50093960501B3E5D5008F
|
||||
:100AB0006FF0DFF69396270097020000B38656008A
|
||||
:100AC00093820000E78006FA93800200938707FF75
|
||||
:100AD0003307F7403306F600E378C3F66FF0DFF331
|
||||
:100AE00003A781C283278714638C070403A74700E9
|
||||
:100AF0001308F001634EE806131827006306050289
|
||||
:100B0000338307012324C30883A887181306100022
|
||||
:100B10003316E600B3E8C80023A417192324D31022
|
||||
:100B2000930620006304D5021307170023A2E700F1
|
||||
:100B3000B387070123A4B7001305000067800000F6
|
||||
:100B40009307C7142324F7146FF05FFA83A6C7181E
|
||||
:100B50001307170023A2E70033E6C60023A6C71831
|
||||
:100B6000B387070123A4B7001305000067800000C6
|
||||
:100B70001305F0FF67800000130101FD23248101AC
|
||||
:100B800003AC81C2232E3101232C4101232A5101C0
|
||||
:100B900023286101232611022324810223229102AA
|
||||
:100BA0002320210323267101930A0500138B0500DE
|
||||
:100BB000130A10009309F0FF03298C14630809023B
|
||||
:100BC000832449001384F4FF6342040293942400B5
|
||||
:100BD000B304990063040B0483A744106380670582
|
||||
:100BE0001304F4FF9384C4FFE31634FF8320C1028F
|
||||
:100BF0000324810283244102032901028329C101C4
|
||||
:100C0000032A8101832A4101032B0101832BC100A7
|
||||
:100C1000032C810013010103678000008327490032
|
||||
:100C200083A644009387F7FF638A870423A2040006
|
||||
:100C3000E38806FA8327891833178A00832B490033
|
||||
:100C4000B377F700639E0700E7800600832749001B
|
||||
:100C5000E39477F783278C14E38427F96FF0DFF5AB
|
||||
:100C60008327C91883A544083377F700631C07005E
|
||||
:100C700013850A00E78006006FF05FFD23228900DC
|
||||
:100C80006FF01FFB13850500E78006006FF01FFC67
|
||||
:100C9000300000003100000032000000330000008E
|
||||
:100CA000340000003500000036000000370000006E
|
||||
:100CB0003800000039000000610000006200000000
|
||||
:100CC0006300000064000000650000006600000092
|
||||
:100CD00048656C6C6F2066726F6D205F697361741C
|
||||
:100CE00074790A004552524F523A205F6B696C6C1E
|
||||
:100CF000206E6F742079657420696D706C656D6508
|
||||
:100D00006E7465640A0000004552524F523A205FEB
|
||||
:100D1000756E6C696E6B206E6F74207965742069D6
|
||||
:100D20006D706C656D656E7465640A004552524F56
|
||||
:100D3000523A205F67657474696D656F66646179A6
|
||||
:100D4000206E6F742079657420696D706C656D65B7
|
||||
:100D50006E7465640A0000004552524F523A205F9B
|
||||
:100D60006C696E6B206E6F742079657420696D708C
|
||||
:0A0D70006C656D656E7465640A0021
|
||||
:04100000500000801C
|
||||
:1010080000000000F41200805C130080C41300800C
|
||||
:1010180000000000000000000000000000000000C8
|
||||
:1010280000000000000000000000000000000000B8
|
||||
: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
|
||||
:00000001FF
|
||||
|
||||
@@ -640,7 +640,7 @@ Warp::Warp(Core *c, Word id) :
|
||||
core(c), pc(0x80000000), interruptEnable(true),
|
||||
supervisorMode(true), activeThreads(0), reg(0), pred(0),
|
||||
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');
|
||||
/* Build the register file. */
|
||||
|
||||
90
simX/enc.cpp
90
simX/enc.cpp
@@ -53,6 +53,8 @@ WordDecoder::WordDecoder(const ArchDef &arch) {
|
||||
opcode_s = 7;
|
||||
reg_s = 5;
|
||||
func3_s = 3;
|
||||
mop_s = 3;
|
||||
vmask_s = 1;
|
||||
|
||||
shift_opcode = 0;
|
||||
shift_rd = opcode_s;
|
||||
@@ -63,6 +65,13 @@ WordDecoder::WordDecoder(const ArchDef &arch) {
|
||||
shift_j_u_immed = opcode_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_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;
|
||||
func3_mask = 0x7;
|
||||
@@ -73,6 +82,8 @@ WordDecoder::WordDecoder(const ArchDef &arch) {
|
||||
b_immed_mask = 0x1fff;
|
||||
u_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);
|
||||
|
||||
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";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
@@ -37,6 +37,8 @@ namespace Harp {
|
||||
public:
|
||||
Reg(): cpuId(0), regNum(0), 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; }
|
||||
|
||||
@@ -47,9 +49,10 @@ namespace Harp {
|
||||
val &= mask;
|
||||
}
|
||||
|
||||
T val;
|
||||
private:
|
||||
Word cpuId, regNum;
|
||||
T val;
|
||||
// T val;
|
||||
|
||||
#ifdef EMU_INSTRUMENTATION
|
||||
/* Access size here is 8, representing the register size of 64-bit cores. */
|
||||
@@ -86,6 +89,14 @@ namespace Harp {
|
||||
Word pc;
|
||||
};
|
||||
|
||||
struct vtype
|
||||
{
|
||||
int vill;
|
||||
int vediv;
|
||||
int vsew;
|
||||
int vlmul;
|
||||
};
|
||||
|
||||
class Warp;
|
||||
|
||||
class Core {
|
||||
@@ -172,6 +183,13 @@ namespace Harp {
|
||||
std::vector<Word> shadowReg;
|
||||
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,
|
||||
shadowSupervisorMode, spawned;
|
||||
|
||||
|
||||
@@ -5,14 +5,14 @@
|
||||
#define __DEBUG_H
|
||||
|
||||
// #define USE_DEBUG 9
|
||||
#define USE_DEBUG -1
|
||||
#define USE_DEBUG 3
|
||||
|
||||
#ifdef USE_DEBUG
|
||||
#include <iostream>
|
||||
|
||||
#define D(lvl, x) do { \
|
||||
using namespace std; \
|
||||
if ((lvl) <= USE_DEBUG) { \
|
||||
if ((lvl) == USE_DEBUG) { \
|
||||
cout << "DEBUG " << __FILE__ << ':' << dec << __LINE__ << ": " \
|
||||
<< x << endl; \
|
||||
} \
|
||||
|
||||
@@ -60,11 +60,15 @@ namespace Harp {
|
||||
Size inst_s, opcode_s, reg_s, func3_s;
|
||||
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;
|
||||
//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,
|
||||
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;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@ namespace Harp {
|
||||
|
||||
bool sign(d < 0);
|
||||
|
||||
bool inf(isinf(d)), zero(d == 0.0);
|
||||
bool inf(std::isinf(d)), zero(d == 0.0);
|
||||
int exp;
|
||||
|
||||
if (!inf && !zero) exp = floor(log2(fabs(d)));
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
|
||||
#include <map>
|
||||
#include <iostream>
|
||||
#include <math.h>
|
||||
|
||||
#include "types.h"
|
||||
#include "trace.h"
|
||||
@@ -29,10 +30,13 @@ namespace Harp {
|
||||
TRAP = 0x7f,
|
||||
FENCE = 0x0f,
|
||||
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.
|
||||
struct InstTableEntry_t {
|
||||
@@ -58,7 +62,10 @@ namespace Harp {
|
||||
{Opcode::TRAP, {"TRAP" , 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::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);
|
||||
@@ -94,6 +101,16 @@ namespace Harp {
|
||||
Word *setSrcImm () { immsrcPresent = true; immsrc = 0xa5; return &immsrc;}
|
||||
void setSrcImm (Word srcImm) { immsrcPresent = true; immsrc = srcImm; }
|
||||
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. */
|
||||
Opcode getOpcode() const { return op; }
|
||||
@@ -111,6 +128,16 @@ namespace Harp {
|
||||
Word getImm() const { return immsrc; }
|
||||
bool hasRefLiteral() const { return refLiteral != NULL; }
|
||||
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. */
|
||||
bool hasRelImm() const { return (*(instTable.find(op))).second.relAddress; }
|
||||
@@ -129,6 +156,10 @@ namespace Harp {
|
||||
RegNum rdest, pdest;
|
||||
Ref *refLiteral;
|
||||
|
||||
//Vector
|
||||
bool vsetImm, vmask;
|
||||
Word vlsWidth, vMop, vNf, vs3, vlmul, vsew, vediv, func6;
|
||||
|
||||
public:
|
||||
|
||||
|
||||
|
||||
@@ -358,12 +358,14 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
}
|
||||
|
||||
|
||||
bool is_vec = false;
|
||||
|
||||
|
||||
|
||||
Size nextActiveThreads = c.activeThreads;
|
||||
Size wordSz = c.core->a.getWordSize();
|
||||
Word nextPc = c.pc;
|
||||
Word VLMAX;
|
||||
|
||||
c.memAccesses.clear();
|
||||
|
||||
@@ -1085,6 +1087,502 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
|
||||
cout << "ERROR: UNSUPPORTED GPGPU INSTRUCTION " << *this << "\n";
|
||||
}
|
||||
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:
|
||||
cout << "pc: " << hex << (c.pc-4) << "\n";
|
||||
cout << "aERROR: Unsupported instruction: " << *this << "\n" << flush;
|
||||
|
||||
2
simX/test_riscv.sh
Normal file → Executable file
2
simX/test_riscv.sh
Normal file → Executable file
@@ -3,4 +3,4 @@ echo start > results.txt
|
||||
# echo ../kernel/vortex_test.hex
|
||||
make
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user