Added vector mask instructions

This commit is contained in:
proshan3 2019-11-21 20:18:29 -05:00
parent a2f284d6f3
commit b4ebc803f3
5 changed files with 1543 additions and 1111 deletions

View file

@ -9,7 +9,14 @@ vx_vec_test:
li a0, 10
sw a0, 0(a1)
sw a0, 32(a1)
vlw.v v0, (a1)
vadd.vv v0, v0, v0
vsw.v v0, (a1)
vlw.v v1, (a1)
li a2, 1
sw a2, 0(a3)
li a2, 0
sw a2, 32(a3)
vlw.v v0, (a3)
vmor.mm v0, v0, v3
vadd.vv v1, v1, v1, v0.t
vsw.v v1, (a1)
vlw.v v5, (a1)
ret

File diff suppressed because it is too large Load diff

View file

@ -1,220 +1,222 @@
:0200000480007A
:10000000970500009385C506130540006B10B500E9
:10001000EF00C005130510006B000500138581C3B8
:100020001386C1C33306A64093050000EF00901D60
:10003000171500001305858DEF00D008EF00D012D2
:10004000130540006B000500EF0010046F00D0089E
:100020001386C1C33306A64093050000EF00501F9E
:10003000171500001305458FEF00900AEF0090148C
:10004000130540006B000500EF00D0056F00900A1B
:10005000B707000093870700638807003715008003
:10006000130585906F00100667800000130540009F
:10006000130545926F00D00767800000130540001C
: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
:1000C00023A0A50023A0A50287E0051213061000B7
:1000D00023A0C6001306000023A0C60207E00612F4
:1000E00057A0016AD7801000A7E0050287E2051239
:1000F00067800000130101FD232681021304010320
:10010000232EA4FC232CB4FC232AC4FC8327C4FD87
:1001100083A707002326F4FE930744FD2322F4FE61
:10012000832744FE03C707008327C4FE2380E7001C
:100130008327C4FE93871700032744FE0347170055
:100140002380E7008327C4FE93872700032744FE0C
:10015000034727002380E7008327C4FE93873700E7
:10016000032744FE034737002380E7008327C4FEAC
:10017000938747002326F4FE232404FE6F004003E8
:10018000832784FE032784FDB307F70003C7070016
:100190008327C4FE2380E7008327C4FE93871700CC
:1001A0002326F4FE832784FE938717002324F4FE7E
:1001B000832744FD032784FEE344F7FC8327C4FE22
:1001C0002320F4FE832704FE93F73700032704FE61
:1001D000B307F7002320F4FE832704FE2326F4FE52
:1001E0008327C4FD0327C4FE23A0E70013000000FB
:1001F0000324C1021301010367800000130101FC05
:10020000232E8102130401042326A4FC2324B4FC1E
:100210008327C4FC83A707002326F4FE9307C4FDAD
:100220002322F4FE8327C4FE03C70700832744FE6E
:100230002380E700832744FE938717000327C4FE2B
:10024000034717002380E700832744FE9387270096
:100250000327C4FE034727002380E700832744FECB
:10026000938737000327C4FE034737002380E70046
:100270008327C4FE938747002326F4FE232404FE2D
:100280006F004003832784FE032784FCB307F70035
:100290000327C4FE034707002380E7008327C4FE2B
:1002A000938717002326F4FE832784FE9387170085
:1002B0002324F4FE8327C4FD032784FEE344F7FCD4
:1002C0008327C4FE2320F4FE832704FE93F7370020
:1002D000032704FEB307F7002320F4FE832704FE60
:1002E0002326F4FE8327C4FC0327C4FE23A0E700D3
:1002F000130000000324C103130101046780000000
:10030000130101FF232681001304010113000000E3
:100310000324C1001301010167800000130101FEE5
:10032000232E8100130401022326A4FE2324B4FEFD
:10033000832784FE3727000023A2E70093070000ED
:10034000138507000324C101130101026780000027
:10035000130101FE232E1100232C8100130401023E
:100360002326A4FEB71700801385C7CEEF00C04F29
:1003700093071000138507008320C1010324810126
:100380001301010267800000130101FD2326110201
:100390002324810213040103232EA4FC232CB4FC88
:1003A000232AC4FCB70700712326F4FEB7070072A6
:1003B0002324F4FE930730002322F4FE130744FEA7
:1003C0009307C4FE1306400093050700138507003A
:1003D000EFF05FD21307C4FD9307C4FE130640007D
:1003E0009305070013850700EFF0DFD0130784FDA6
:1003F0009307C4FE1306400093050700138507000A
:10040000EFF05FCF130744FD9307C4FE13064000CF
:100410009305070013850700EFF0DFCD83A7C1C266
:10042000E7800700130704FE930784FE9305070087
:1004300013850700EFF09FDC832704FE1385070078
:100440008320C1020324810213010103678000009D
:10045000130101FD23261102232481021304010349
:10046000232EA4FC232CB4FC232AC4FCB707007160
:100470002324F4FEB70700722326F4FE93074000FE
:100480002322F4FE130744FE930784FE1306400064
:100490009305070013850700EFF0DFC51307C4FDC0
:1004A000930784FE13064000930507001385070099
:1004B000EFF05FC4130784FD930784FE130640002A
:1004C0009305070013850700EFF0DFC2130744FD13
:1004D000930784FE13064000930507001385070069
:1004E000EFF05FC183A7C1C2E7800700832744FD07
:1004F000138507008320C102032481021301010335
:1005000067800000130101FD2326110223248102CC
:1005100013040103232EA4FC232CB4FC232AC4FCC3
:10052000B70700712326F4FE930750002324F4FE3E
:10053000130784FE9307C4FE1306400093050700CB
:1005400013850700EFF01FBB1307C4FD9307C4FE1C
:10055000130640009305070013850700EFF09FB9CD
:100560009307C4FE032644FD832584FD13850700FD
:10057000EFF05FB883A7C1C2E7800700832744FD7F
:10058000138507008320C1020324810213010103A4
:1005900067800000130101FD23268102130401037B
:1005A000232EA4FC8327C4FD63D807008327C4FD42
:1005B000B307F040232EF4FC0327C4FDB737000037
:1005C0009387078063D8E700B737000093870780D9
:1005D000232EF4FC83A701C32326F4FE03A701C343
:1005E0008327C4FD3307F70023A8E1C28327C4FE95
:1005F000138507000324C102130101036780000073
:10060000130101FE232E1100232C8100130401028B
:100610002326A4FE13050000EF00001E13000000B7
:100620008320C101032481011301010267800000BE
:10063000130101FD23261102232481021304010367
:10064000232EA4FC232CB4FC232AC4FCB70700717E
:100650002326F4FEB70700722324F4FE93077000EC
:100660002322F4FE130744FE9307C4FE1306400042
:100670009305070013850700EFF0DFA71307C4FDFC
:100680009307C4FE13064000930507001385070077
:10069000EFF05FA6130784FD9307C4FE1306400026
:1006A0009305070013850700EFF0DFA4130744FD4F
:1006B0009307C4FE13064000930507001385070047
:1006C000EFF05FA383A7C1C2E7800700130704FE12
:1006D000930784FE9305070013850700EFF01FB210
:1006E000832704FE138507008320C10203248102AF
:1006F0001301010367800000130101FF232611008D
:100700002324810013040101B7170080138507D04B
:10071000EF008015130000008320C1000324810036
:100720001301010167800000130101FF232611005E
:100730002324810013040101EF00800E93070500BC
:10074000138507008320C1000324810013010101E8
:1007500067800000130101FF23261100232481007C
:1007600013040101B7170080138547D2EF00C00FB3
:10077000130000008320C100032481001301010144
:1007800067800000130101FF23261100232481004C
:1007900013040101B7170080138587D4EF00C00C44
:1007A00083A781C39386170023ACD1C213850700AA
:1007B0008320C10003248100130101016780000030
:1007C000130101FF232611002324810013040101DA
:1007D000B7170080138547D7EF000009130000000A
:1007E0008320C10003248100130101016780000000
:1007F0006B10B500678000006B000500678000008B
:100800006B40B500678000006B200500678000002A
:100810006B300000678000007325100267800000C5
:100820007325000267800000130540006B0005007F
:10083000F32610029396F600732600029315A60085
:100840001316260037F1FF6F3301B1403301D14059
:100850003301C100F3261002638606001305000071
:100860006B00050067800000130141FF2320110089
:100870002322B1008345050063880500EF00C00115
:10088000130515006FF01FFF832001008325410031
:100890001301C10067800000B702010023A0B2006D
:1008A00067800000130101FF23261100232481002B
:1008B0001304010113051000EFF01FF4EFF08FFF98
:1008C00013050000EFF05FF313000000138507002D
:1008D0008320C1000324810013010101678000000F
:1008E00093050500930600001306000013050000A1
:1008F0006F00C020130101FF930500002324810035
:100900002326110013040500EF00C02803A581C2AF
:100910008327C50363840700E780070013050400ED
:10092000EFF01FCE130101FF232481002322910049
:1009300037140080B71400809387440013044400E8
:100940003304F440232611001354244063020402AC
:10095000931424009384C4FFB384F40083A7040099
:100960001304F4FF9384C4FFE7800700E31804FE38
:100970008320C1000324810083244100130101016D
:1009800067800000130101FF23248100232021013F
:1009900037140080371900809307040013090900F9
:1009A0003309F940232611002322910013592940CD
:1009B0006300090213040400930400008327040069
:1009C0009384140013044400E7800700E31899FEA1
:1009D0003714008037190080930704001309490079
:1009E0003309F94013592940630009021304040034
:1009F000930400008327040093841400130444002C
:100A0000E7800700E31899FE8320C10003248100DA
:100A100083244100032901001301010167800000C4
:100A20001303F00013070500637EC3029377F700FA
:100A30006390070A63920508937606FF1376F60023
:100A4000B386E6002320B7002322B7002324B70093
:100A50002326B70013070701E366D7FE63140600D9
:100A600067800000B306C3409396260097020000FB
:100A7000B38656006780C6002307B700A306B700F9
:100A80002306B700A305B7002305B700A304B700EA
:100A90002304B700A303B7002303B700A302B700E2
:100AA0002302B700A301B7002301B700A300B700DA
:100AB0002300B7006780000093F5F50F939685003B
:100AC000B3E5D50093960501B3E5D5006FF0DFF6E9
:100AD0009396270097020000B38656009382000089
:100AE000E78006FA93800200938707FF3307F740F9
:100AF0003306F600E378C3F66FF0DFF303A781C295
:100B000083278714638C070403A747001308F001A9
:100B1000634EE806131827006306050233830701B6
:100B20002324C30883A88718130610003316E60091
:100B3000B3E8C80023A417192324D3109306200078
:100B40006304D5021307170023A2E700B387070148
:100B500023A4B70013050000678000009307C714A3
:100B60002324F7146FF05FFA83A6C7181307170042
:100B700023A2E70033E6C60023A6C718B387070100
:100B800023A4B70013050000678000001305F0FFE1
:100B900067800000130101FD2324810103AC81C2A1
:100BA000232E3101232C4101232A510123286101E5
:100BB00023261102232481022322910223202103D0
:100BC00023267101930A0500138B0500130A1000F8
:100BD0009309F0FF03298C14630809028324490058
:100BE0001384F4FF6342040293942400B304990035
:100BF00063040B0483A74410638067051304F4FFA8
:100C00009384C4FFE31634FF8320C10203248102CE
:100C100083244102032901028329C101032A81019E
:100C2000832A4101032B0101832BC100032C810086
:100C300013010103678000008327490083A6440055
:100C40009387F7FF638A870423A20400E38806FAE8
:100C50008327891833178A00832B4900B377F7005D
:100C6000639E0700E780060083274900E39477F737
:100C700083278C14E38427F96FF0DFF58327C918E5
:100C800083A544083377F700631C070013850A0027
:100C9000E78006006FF05FFD232289006FF01FFBE5
:0C0CA00013850500E78006006FF01FFCC4
:100CAC003000000031000000320000003300000072
:100CBC003400000035000000360000003700000052
:100CCC0038000000390000006100000062000000E4
:100CDC006300000064000000650000006600000076
:100CEC0048656C6C6F2066726F6D205F6973617400
:100CFC0074790A004552524F523A205F6B696C6C02
:100D0C00206E6F742079657420696D706C656D65EB
:100D1C006E7465640A0000004552524F523A205FCF
:100D2C00756E6C696E6B206E6F74207965742069BA
:100D3C006D706C656D656E7465640A004552524F3A
:100D4C00523A205F67657474696D656F666461798A
:100D5C00206E6F742079657420696D706C656D659B
:100D6C006E7465640A0000004552524F523A205F7F
:100D7C006C696E6B206E6F742079657420696D7070
:0A0D8C006C656D656E7465640A0005
:04100000500000801C
:1010080000000000F41200805C130080C41300800C
:1010180000000000000000000000000000000000C8

View file

@ -1102,25 +1102,60 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
vector<Reg<char *>> vr1 = c.vreg[rsrc[0]];
vector<Reg<char *>> vr2 = c.vreg[rsrc[1]];
vector<Reg<char *>> vd = c.vreg[rdest];
vector<Reg<char *>> mask = c.vreg[0];
if (c.vtype.vsew == 8)
{
for (uint8_t i = 0; i < c.vl; i++)
{
uint8_t *mask_ptr = (uint8_t*) mask[i].val;
uint8_t value = (*mask_ptr & 0x1);
if(vmask || (!vmask && value)){
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;
cout << "Adding " << *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 *mask_ptr = (uint16_t*) mask[i].val;
uint16_t value = (*mask_ptr & 0x1);
if(vmask || (!vmask && value)){
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;
cout << "Adding " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint16_t * result_ptr = (uint16_t *) vd[i].val;
*result_ptr = result;
}
}
} 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 *mask_ptr = (int*) mask[i].val;
int value = (*mask_ptr & 0x1);
if(vmask || (!vmask && value)){
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;
int * result_ptr = (int *) vd[i].val;
*result_ptr = result;
}
}
}
@ -1470,6 +1505,387 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
break;
}
break;
case 2:
{
switch(func6){
case 24: //vmandnot
{
D(3, "vmandnot");
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 first_value = (*first_ptr & 0x1);
uint8_t second_value = (*second_ptr & 0x1);
uint8_t result = (first_value & !second_value);
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 first_value = (*first_ptr & 0x1);
uint16_t second_value = (*second_ptr & 0x1);
uint16_t result = (first_value & !second_value);
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 first_value = (*first_ptr & 0x1);
uint32_t second_value = (*second_ptr & 0x1);
uint32_t result = (first_value & !second_value);
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint32_t * result_ptr = (uint32_t *) vd[i].val;
*result_ptr = result;
}
}
}
break;
case 25: //vmand
{
D(3, "vmand");
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 first_value = (*first_ptr & 0x1);
uint8_t second_value = (*second_ptr & 0x1);
uint8_t result = (first_value & second_value);
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 first_value = (*first_ptr & 0x1);
uint16_t second_value = (*second_ptr & 0x1);
uint16_t result = (first_value & second_value);
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 first_value = (*first_ptr & 0x1);
uint32_t second_value = (*second_ptr & 0x1);
uint32_t result = (first_value & second_value);
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint32_t * result_ptr = (uint32_t *) vd[i].val;
*result_ptr = result;
}
}
}
break;
case 26: //vmor
{
D(3, "vmor");
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 first_value = (*first_ptr & 0x1);
uint8_t second_value = (*second_ptr & 0x1);
uint8_t result = (first_value | second_value);
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 first_value = (*first_ptr & 0x1);
uint16_t second_value = (*second_ptr & 0x1);
uint16_t result = (first_value | second_value);
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 first_value = (*first_ptr & 0x1);
uint32_t second_value = (*second_ptr & 0x1);
uint32_t result = (first_value | second_value);
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint32_t * result_ptr = (uint32_t *) vd[i].val;
*result_ptr = result;
}
}
}
break;
case 27: //vmxor
{
D(3, "vmxor");
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 first_value = (*first_ptr & 0x1);
uint8_t second_value = (*second_ptr & 0x1);
uint8_t result = (first_value ^ second_value);
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 first_value = (*first_ptr & 0x1);
uint16_t second_value = (*second_ptr & 0x1);
uint16_t result = (first_value ^ second_value);
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 first_value = (*first_ptr & 0x1);
uint32_t second_value = (*second_ptr & 0x1);
uint32_t result = (first_value ^ second_value);
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint32_t * result_ptr = (uint32_t *) vd[i].val;
*result_ptr = result;
}
}
}
break;
case 28: //vmornot
{
D(3, "vmornot");
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 first_value = (*first_ptr & 0x1);
uint8_t second_value = (*second_ptr & 0x1);
uint8_t result = (first_value | !second_value);
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 first_value = (*first_ptr & 0x1);
uint16_t second_value = (*second_ptr & 0x1);
uint16_t result = (first_value | !second_value);
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 first_value = (*first_ptr & 0x1);
uint32_t second_value = (*second_ptr & 0x1);
uint32_t result = (first_value | !second_value);
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint32_t * result_ptr = (uint32_t *) vd[i].val;
*result_ptr = result;
}
}
}
break;
case 29: //vmnand
{
D(3, "vmnand");
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 first_value = (*first_ptr & 0x1);
uint8_t second_value = (*second_ptr & 0x1);
uint8_t result = !(first_value & second_value);
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 first_value = (*first_ptr & 0x1);
uint16_t second_value = (*second_ptr & 0x1);
uint16_t result = !(first_value & second_value);
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 first_value = (*first_ptr & 0x1);
uint32_t second_value = (*second_ptr & 0x1);
uint32_t result = !(first_value & second_value);
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint32_t * result_ptr = (uint32_t *) vd[i].val;
*result_ptr = result;
}
}
}
break;
case 30: //vmnor
{
D(3, "vmnor");
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 first_value = (*first_ptr & 0x1);
uint8_t second_value = (*second_ptr & 0x1);
uint8_t result = !(first_value | second_value);
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 first_value = (*first_ptr & 0x1);
uint16_t second_value = (*second_ptr & 0x1);
uint16_t result = !(first_value | second_value);
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 first_value = (*first_ptr & 0x1);
uint32_t second_value = (*second_ptr & 0x1);
uint32_t result = !(first_value | second_value);
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint32_t * result_ptr = (uint32_t *) vd[i].val;
*result_ptr = result;
}
}
}
break;
case 31: //vmxnor
{
D(3, "vmxnor");
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 first_value = (*first_ptr & 0x1);
uint8_t second_value = (*second_ptr & 0x1);
uint8_t result = !(first_value ^ second_value);
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 first_value = (*first_ptr & 0x1);
uint16_t second_value = (*second_ptr & 0x1);
uint16_t result = !(first_value ^ second_value);
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 first_value = (*first_ptr & 0x1);
uint32_t second_value = (*second_ptr & 0x1);
uint32_t result = !(first_value ^ second_value);
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint32_t * result_ptr = (uint32_t *) vd[i].val;
*result_ptr = result;
}
}
}
break;
}
}
break;
case 7:
{
is_vec = true;
@ -1497,7 +1913,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
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;
for (int f = 0; f < (vsew/32); f++) elem_ptr[f] = 0;
c.vreg[j].push_back(Reg<char*>(c.id, regNum++, (char *) elem_ptr));
}
}