Added vector mask instructions

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

View File

@@ -9,7 +9,14 @@ vx_vec_test:
li a0, 10 li a0, 10
sw a0, 0(a1) sw a0, 0(a1)
sw a0, 32(a1) sw a0, 32(a1)
vlw.v v0, (a1) vlw.v v1, (a1)
vadd.vv v0, v0, v0 li a2, 1
vsw.v v0, (a1) 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 ret

File diff suppressed because it is too large Load Diff

View File

@@ -1,220 +1,222 @@
:0200000480007A :0200000480007A
:10000000970500009385C506130540006B10B500E9 :10000000970500009385C506130540006B10B500E9
:10001000EF00C005130510006B000500138581C3B8 :10001000EF00C005130510006B000500138581C3B8
:100020001386C1C33306A64093050000EF00901D60 :100020001386C1C33306A64093050000EF00501F9E
:10003000171500001305858DEF00D008EF00D012D2 :10003000171500001305458FEF00900AEF0090148C
:10004000130540006B000500EF0010046F00D0089E :10004000130540006B000500EF00D0056F00900A1B
:10005000B707000093870700638807003715008003 :10005000B707000093870700638807003715008003
:10006000130585906F00100667800000130540009F :10006000130545926F00D00767800000130540001C
:100070006B0005009711000093814179F32610026F :100070006B0005009711000093814179F32610026F
:100080009396A601732600029315A6001316260068 :100080009396A601732600029315A6001316260068
:1000900037F1FF6F3301B1403301D1403301C1006B :1000900037F1FF6F3301B1403301D1403301C1006B
:1000A000F326100263860600130500006B000500AE :1000A000F326100263860600130500006B000500AE
:1000B0006780000013052000D77285001305A0009B :1000B0006780000013052000D77285001305A0009B
:1000C00023A0A50023A0A50207E005125700000207 :1000C00023A0A50023A0A50287E0051213061000B7
:1000D00027E0050267800000130101FD232681024D :1000D00023A0C6001306000023A0C60207E00612F4
:1000E00013040103232EA4FC232CB4FC232AC4FCF8 :1000E00057A0016AD7801000A7E0050287E2051239
:1000F0008327C4FD83A707002326F4FE930744FD4E :1000F00067800000130101FD232681021304010320
:100100002322F4FE832744FE03C707008327C4FE8F :10010000232EA4FC232CB4FC232AC4FC8327C4FD87
:100110002380E7008327C4FE93871700032744FE4C :1001100083A707002326F4FE930744FD2322F4FE61
:10012000034717002380E7008327C4FE9387270037 :10012000832744FE03C707008327C4FE2380E7001C
:10013000032744FE034727002380E7008327C4FEEC :100130008327C4FE93871700032744FE0347170055
:1001400093873700032744FE034737002380E700E7 :100140002380E7008327C4FE93872700032744FE0C
:100150008327C4FE938747002326F4FE232404FE4E :10015000034727002380E7008327C4FE93873700E7
:100160006F004003832784FE032784FDB307F70055 :10016000032744FE034737002380E7008327C4FEAC
:1001700003C707008327C4FE2380E7008327C4FE4C :10017000938747002326F4FE232404FE6F004003E8
:10018000938717002326F4FE832784FE93871700A6 :10018000832784FE032784FDB307F70003C7070016
:100190002324F4FE832744FD032784FEE344F7FC75 :100190008327C4FE2380E7008327C4FE93871700CC
:1001A0008327C4FE2320F4FE832704FE93F7370041 :1001A0002326F4FE832784FE938717002324F4FE7E
:1001B000032704FEB307F7002320F4FE832704FE81 :1001B000832744FD032784FEE344F7FC8327C4FE22
:1001C0002326F4FE8327C4FD0327C4FE23A0E700F3 :1001C0002320F4FE832704FE93F73700032704FE61
:1001D000130000000324C102130101036780000023 :1001D000B307F7002320F4FE832704FE2326F4FE52
:1001E000130101FC232E8102130401042326A4FC25 :1001E0008327C4FD0327C4FE23A0E70013000000FB
:1001F0002324B4FC8327C4FC83A707002326F4FE32 :1001F0000324C1021301010367800000130101FC05
:100200009307C4FD2322F4FE8327C4FE03C707001F :10020000232E8102130401042326A4FC2324B4FC1E
:10021000832744FE2380E700832744FE938717004B :100210008327C4FC83A707002326F4FE9307C4FDAD
:100220000327C4FE034717002380E700832744FE0B :100220002322F4FE8327C4FE03C70700832744FE6E
:10023000938727000327C4FE034727002380E70096 :100230002380E700832744FE938717000327C4FE2B
:10024000832744FE938737000327C4FE0347370004 :10024000034717002380E700832744FE9387270096
:100250002380E7008327C4FE938747002326F4FE0C :100250000327C4FE034727002380E700832744FECB
:10026000232404FE6F004003832784FE032784FCBD :10026000938737000327C4FE034737002380E70046
:10027000B307F7000327C4FE034707002380E70006 :100270008327C4FE938747002326F4FE232404FE2D
:100280008327C4FE938717002326F4FE832784FE6A :100280006F004003832784FE032784FCB307F70035
:10029000938717002324F4FE8327C4FD032784FEDD :100290000327C4FE034707002380E7008327C4FE2B
:1002A000E344F7FC8327C4FE2320F4FE832704FEE7 :1002A000938717002326F4FE832784FE9387170085
:1002B00093F73700032704FEB307F7002320F4FE6B :1002B0002324F4FE8327C4FD032784FEE344F7FCD4
:1002C000832704FE2326F4FE8327C4FC0327C4FEF1 :1002C0008327C4FE2320F4FE832704FE93F7370020
:1002D00023A0E700130000000324C103130101045D :1002D000032704FEB307F7002320F4FE832704FE60
:1002E00067800000130101FF232681001304010130 :1002E0002326F4FE8327C4FC0327C4FE23A0E700D3
:1002F000130000000324C100130101016780000006 :1002F000130000000324C103130101046780000000
:10030000130101FE232E8100130401022326A4FE03 :10030000130101FF232681001304010113000000E3
:100310002324B4FE832784FE3727000023A2E700AE :100310000324C1001301010167800000130101FEE5
:1003200093070000138507000324C1011301010294 :10032000232E8100130401022326A4FE2324B4FEFD
:1003300067800000130101FE232E1100232C810091 :10033000832784FE3727000023A2E70093070000ED
:10034000130401022326A4FEB7170080138507CDEE :10034000138507000324C101130101026780000027
:10035000EF00C04F93071000138507008320C101F1 :10035000130101FE232E1100232C8100130401023E
:10036000032481011301010267800000130101FDD4 :100360002326A4FEB71700801385C7CEEF00C04F29
:10037000232611022324810213040103232EA4FC4B :1003700093071000138507008320C1010324810126
:10038000232CB4FC232AC4FCB70700712326F4FEF7 :100380001301010267800000130101FD2326110201
:10039000B70700722324F4FE930730002322F4FEF3 :100390002324810213040103232EA4FC232CB4FC88
:1003A000130744FE9307C4FE13064000930507009D :1003A000232AC4FCB70700712326F4FEB7070072A6
:1003B00013850700EFF05FD21307C4FD9307C4FE57 :1003B0002324F4FE930730002322F4FE130744FEA7
:1003C000130640009305070013850700EFF0DFD008 :1003C0009307C4FE1306400093050700138507003A
:1003D000130784FD9307C4FE13064000930507002E :1003D000EFF05FD21307C4FD9307C4FE130640007D
:1003E00013850700EFF05FCF130744FD9307C4FEAA :1003E0009305070013850700EFF0DFD0130784FDA6
:1003F000130640009305070013850700EFF0DFCDDB :1003F0009307C4FE1306400093050700138507000A
:1004000083A7C1C2E7800700130704FE930784FE99 :10040000EFF05FCF130744FD9307C4FE13064000CF
:100410009305070013850700EFF09FDC832704FE98 :100410009305070013850700EFF0DFCD83A7C1C266
:10042000138507008320C102032481021301010305 :10042000E7800700130704FE930784FE9305070087
:1004300067800000130101FD23261102232481029D :1004300013850700EFF09FDC832704FE1385070078
:1004400013040103232EA4FC232CB4FC232AC4FC94 :100440008320C1020324810213010103678000009D
:10045000B70700712324F4FEB70700722326F4FEC9 :10045000130101FD23261102232481021304010349
:10046000930740002322F4FE130744FE930784FE03 :10046000232EA4FC232CB4FC232AC4FCB707007160
:10047000130640009305070013850700EFF0DFC562 :100470002324F4FEB70700722326F4FE93074000FE
:100480001307C4FD930784FE13064000930507007D :100480002322F4FE130744FE930784FE1306400064
:1004900013850700EFF05FC4130784FD930784FE04 :100490009305070013850700EFF0DFC51307C4FDC0
:1004A000130640009305070013850700EFF0DFC235 :1004A000930784FE13064000930507001385070099
:1004B000130744FD930784FE1306400093050700CD :1004B000EFF05FC4130784FD930784FE130640002A
:1004C00013850700EFF05FC183A7C1C2E780070073 :1004C0009305070013850700EFF0DFC2130744FD13
:1004D000832744FD138507008320C1020324810282 :1004D000930784FE13064000930507001385070069
:1004E0001301010367800000130101FD232611029F :1004E000EFF05FC183A7C1C2E7800700832744FD07
:1004F0002324810213040103232EA4FC232CB4FC27 :1004F000138507008320C102032481021301010335
:10050000232AC4FCB70700712326F4FE930750008A :1005000067800000130101FD2326110223248102CC
:100510002324F4FE130784FE9307C4FE1306400051 :1005100013040103232EA4FC232CB4FC232AC4FCC3
:100520009305070013850700EFF01FBB1307C4FDF9 :10052000B70700712326F4FE930750002324F4FE3E
:100530009307C4FE130640009305070013850700C8 :10053000130784FE9307C4FE1306400093050700CB
:10054000EFF09FB99307C4FE032644FD832584FD85 :1005400013850700EFF01FBB1307C4FD9307C4FE1C
:1005500013850700EFF05FB883A7C1C2E7800700EB :10055000130640009305070013850700EFF09FB9CD
:10056000832744FD138507008320C10203248102F1 :100560009307C4FE032644FD832584FD13850700FD
:100570001301010367800000130101FD232681029E :10057000EFF05FB883A7C1C2E7800700832744FD7F
:1005800013040103232EA4FC8327C4FD63D80700B2 :10058000138507008320C1020324810213010103A4
:100590008327C4FDB307F040232EF4FC0327C4FDDA :1005900067800000130101FD23268102130401037B
:1005A000B73700009387078063D8E700B7370000AC :1005A000232EA4FC8327C4FD63D807008327C4FD42
:1005B00093870780232EF4FC83A701C32326F4FE30 :1005B000B307F040232EF4FC0327C4FDB737000037
:1005C00003A701C38327C4FD3307F70023A8E1C2B3 :1005C0009387078063D8E700B737000093870780D9
:1005D0008327C4FE138507000324C102130101030E :1005D000232EF4FC83A701C32326F4FE03A701C343
:1005E00067800000130101FE232E1100232C8100DF :1005E0008327C4FD3307F70023A8E1C28327C4FE95
:1005F000130401022326A4FE13050000EF00001ED1 :1005F000138507000324C102130101036780000073
:10060000130000008320C1010324810113010102B2 :10060000130101FE232E1100232C8100130401028B
:1006100067800000130101FD2326110223248102BB :100610002326A4FE13050000EF00001E13000000B7
:1006200013040103232EA4FC232CB4FC232AC4FCB2 :100620008320C101032481011301010267800000BE
:10063000B70700712326F4FEB70700722324F4FEE7 :10063000130101FD23261102232481021304010367
:10064000930770002322F4FE130744FE9307C4FEB1 :10064000232EA4FC232CB4FC232AC4FCB70700717E
:10065000130640009305070013850700EFF0DFA79E :100650002326F4FEB70700722324F4FE93077000EC
:100660001307C4FD9307C4FE13064000930507005B :100660002322F4FE130744FE9307C4FE1306400042
:1006700013850700EFF05FA6130784FD9307C4FE00 :100670009305070013850700EFF0DFA71307C4FDFC
:10068000130640009305070013850700EFF0DFA471 :100680009307C4FE13064000930507001385070077
:10069000130744FD9307C4FE1306400093050700AB :10069000EFF05FA6130784FD9307C4FE1306400026
:1006A00013850700EFF05FA383A7C1C2E7800700AF :1006A0009305070013850700EFF0DFA4130744FD4F
:1006B000130704FE930784FE9305070013850700C4 :1006B0009307C4FE13064000930507001385070047
:1006C000EFF01FB2832704FE138507008320C102C9 :1006C000EFF05FA383A7C1C2E7800700130704FE12
:1006D000032481021301010367800000130101FF5D :1006D000930784FE9305070013850700EFF01FB210
:1006E000232611002324810013040101B717008081 :1006E000832704FE138507008320C10203248102AF
:1006F000138547CEEF008015130000008320C10052 :1006F0001301010367800000130101FF232611008D
:10070000032481001301010167800000130101FF30 :100700002324810013040101B7170080138507D04B
:10071000232611002324810013040101EF00800E21 :10071000EF008015130000008320C1000324810036
:1007200093070500138507008320C100032481007F :100720001301010167800000130101FF232611005E
:100730001301010167800000130101FF232611004E :100730002324810013040101EF00800E93070500BC
:100740002324810013040101B7170080138587D08B :10074000138507008320C1000324810013010101E8
:10075000EF00C00F130000008320C10003248100BC :1007500067800000130101FF23261100232481007C
:100760001301010167800000130101FF232611001E :1007600013040101B7170080138547D2EF00C00FB3
:100770002324810013040101B71700801385C7D219 :10077000130000008320C100032481001301010144
:10078000EF00C00C83A781C39386170023ACD1C2AE :1007800067800000130101FF23261100232481004C
:10079000138507008320C100032481001301010198 :1007900013040101B7170080138587D4EF00C00C44
:1007A00067800000130101FF23261100232481002C :1007A00083A781C39386170023ACD1C213850700AA
:1007B00013040101B7170080138587D5EF000009E6 :1007B0008320C10003248100130101016780000030
:1007C000130000008320C1000324810013010101F4 :1007C000130101FF232611002324810013040101DA
:1007D000678000006B10B500678000006B000500AB :1007D000B7170080138547D7EF000009130000000A
:1007E000678000006B40B500678000006B2005004B :1007E0008320C10003248100130101016780000000
:1007F000678000006B3000006780000073251002E6 :1007F0006B10B500678000006B000500678000008B
:100800006780000073250002678000001305400028 :100800006B40B500678000006B200500678000002A
:100810006B000500F32610029396F6007326000283 :100810006B300000678000007325100267800000C5
:100820009315A6001316260037F1FF6F3301B14070 :100820007325000267800000130540006B0005007F
:100830003301D1403301C100F32610026386060064 :10083000F32610029396F600732600029315A60085
:10084000130500006B00050067800000130141FFE5 :100840001316260037F1FF6F3301B1403301D14059
:10085000232011002322B100834505006388050091 :100850003301C100F3261002638606001305000071
:10086000EF00C001130515006FF01FFF832001008A :100860006B00050067800000130141FF2320110089
:10087000832541001301C10067800000B702010019 :100870002322B1008345050063880500EF00C00115
:1008800023A0B20067800000130101FF232611009E :10088000130515006FF01FFF832001008325410031
:10089000232481001304010113051000EFF01FF45D :100890001301C10067800000B702010023A0B2006D
:1008A000EFF05F8113050000EFF05FF3130000002D :1008A00067800000130101FF23261100232481002B
:1008B000138507008320C100032481001301010177 :1008B0001304010113051000EFF01FF4EFF08FFF98
:1008C00067800000930505009306000013060000F2 :1008C00013050000EFF05FF313000000138507002D
:1008D000130500006F00C020130101FF9305000005 :1008D0008320C1000324810013010101678000000F
:1008E000232481002326110013040500EF00C028F3 :1008E00093050500930600001306000013050000A1
:1008F00003A581C28327C50363840700E78007003F :1008F0006F00C020130101FF930500002324810035
:1009000013050400EFF01FCE130101FF2324810023 :100900002326110013040500EF00C02803A581C2AF
:100910002322910037140080B7140080938744008D :100910008327C50363840700E780070013050400ED
:10092000130444003304F4402326110013542440DC :10092000EFF01FCE130101FF232481002322910049
:1009300063020402931424009384C4FFB384F4007C :1009300037140080B71400809387440013044400E8
:1009400083A704001304F4FF9384C4FFE780070027 :100940003304F440232611001354244063020402AC
:10095000E31804FE8320C1000324810083244100A6 :10095000931424009384C4FFB384F40083A7040099
:100960001301010167800000130101FF23248100AE :100960001304F4FF9384C4FFE7800700E31804FE38
:1009700023202101371400803719008093070400D9 :100970008320C1000324810083244100130101016D
:10098000130909003309F94023261100232291009D :1009800067800000130101FF23248100232021013F
:100990001359294063000902130404009304000062 :1009900037140080371900809307040013090900F9
:1009A000832704009384140013044400E7800700A5 :1009A0003309F940232611002322910013592940CD
:1009B000E31899FE3714008037190080930704006C :1009B0006300090213040400930400008327040069
:1009C000130949003309F94013592940630009020A :1009C0009384140013044400E7800700E31899FEA1
:1009D000130404009304000083270400938414008C :1009D0003714008037190080930704001309490079
:1009E00013044400E7800700E31899FE8320C10048 :1009E0003309F94013592940630009021304040034
:1009F0000324810083244100032901001301010124 :1009F000930400008327040093841400130444002C
:100A0000678000001303F00013070500637EC30234 :100A0000E7800700E31899FE8320C10003248100DA
:100A10009377F7006390070A63920508937606FFC1 :100A100083244100032901001301010167800000C4
:100A20001376F600B386E6002320B7002322B70032 :100A20001303F00013070500637EC3029377F700FA
:100A30002324B7002326B70013070701E366D7FE78 :100A30006390070A63920508937606FF1376F60023
:100A40006314060067800000B306C3409396260037 :100A4000B386E6002320B7002322B7002324B70093
:100A500097020000B38656006780C6002307B700E0 :100A50002326B70013070701E366D7FE63140600D9
:100A6000A306B7002306B700A305B7002305B70008 :100A600067800000B306C3409396260097020000FB
:100A7000A304B7002304B700A303B7002303B70000 :100A7000B38656006780C6002307B700A306B700F9
:100A8000A302B7002302B700A301B7002301B700F8 :100A80002306B700A305B7002305B700A304B700EA
:100A9000A300B7002300B7006780000093F5F50FAF :100A90002304B700A303B7002303B700A302B700E2
:100AA00093968500B3E5D50093960501B3E5D5008F :100AA0002302B700A301B7002301B700A300B700DA
:100AB0006FF0DFF69396270097020000B38656008A :100AB0002300B7006780000093F5F50F939685003B
:100AC00093820000E78006FA93800200938707FF75 :100AC000B3E5D50093960501B3E5D5006FF0DFF6E9
:100AD0003307F7403306F600E378C3F66FF0DFF331 :100AD0009396270097020000B38656009382000089
:100AE00003A781C283278714638C070403A74700E9 :100AE000E78006FA93800200938707FF3307F740F9
:100AF0001308F001634EE806131827006306050289 :100AF0003306F600E378C3F66FF0DFF303A781C295
:100B0000338307012324C30883A887181306100022 :100B000083278714638C070403A747001308F001A9
:100B10003316E600B3E8C80023A417192324D31022 :100B1000634EE806131827006306050233830701B6
:100B2000930620006304D5021307170023A2E700F1 :100B20002324C30883A88718130610003316E60091
:100B3000B387070123A4B7001305000067800000F6 :100B3000B3E8C80023A417192324D3109306200078
:100B40009307C7142324F7146FF05FFA83A6C7181E :100B40006304D5021307170023A2E700B387070148
:100B50001307170023A2E70033E6C60023A6C71831 :100B500023A4B70013050000678000009307C714A3
:100B6000B387070123A4B7001305000067800000C6 :100B60002324F7146FF05FFA83A6C7181307170042
:100B70001305F0FF67800000130101FD23248101AC :100B700023A2E70033E6C60023A6C718B387070100
:100B800003AC81C2232E3101232C4101232A5101C0 :100B800023A4B70013050000678000001305F0FFE1
:100B900023286101232611022324810223229102AA :100B900067800000130101FD2324810103AC81C2A1
:100BA0002320210323267101930A0500138B0500DE :100BA000232E3101232C4101232A510123286101E5
:100BB000130A10009309F0FF03298C14630809023B :100BB00023261102232481022322910223202103D0
:100BC000832449001384F4FF6342040293942400B5 :100BC00023267101930A0500138B0500130A1000F8
:100BD000B304990063040B0483A744106380670582 :100BD0009309F0FF03298C14630809028324490058
:100BE0001304F4FF9384C4FFE31634FF8320C1028F :100BE0001384F4FF6342040293942400B304990035
:100BF0000324810283244102032901028329C101C4 :100BF00063040B0483A74410638067051304F4FFA8
:100C0000032A8101832A4101032B0101832BC100A7 :100C00009384C4FFE31634FF8320C10203248102CE
:100C1000032C810013010103678000008327490032 :100C100083244102032901028329C101032A81019E
:100C200083A644009387F7FF638A870423A2040006 :100C2000832A4101032B0101832BC100032C810086
:100C3000E38806FA8327891833178A00832B490033 :100C300013010103678000008327490083A6440055
:100C4000B377F700639E0700E7800600832749001B :100C40009387F7FF638A870423A20400E38806FAE8
:100C5000E39477F783278C14E38427F96FF0DFF5AB :100C50008327891833178A00832B4900B377F7005D
:100C60008327C91883A544083377F700631C07005E :100C6000639E0700E780060083274900E39477F737
:100C700013850A00E78006006FF05FFD23228900DC :100C700083278C14E38427F96FF0DFF58327C918E5
:100C80006FF01FFB13850500E78006006FF01FFC67 :100C800083A544083377F700631C070013850A0027
:100C9000300000003100000032000000330000008E :100C9000E78006006FF05FFD232289006FF01FFBE5
:100CA000340000003500000036000000370000006E :0C0CA00013850500E78006006FF01FFCC4
:100CB0003800000039000000610000006200000000 :100CAC003000000031000000320000003300000072
:100CC0006300000064000000650000006600000092 :100CBC003400000035000000360000003700000052
:100CD00048656C6C6F2066726F6D205F697361741C :100CCC0038000000390000006100000062000000E4
:100CE00074790A004552524F523A205F6B696C6C1E :100CDC006300000064000000650000006600000076
:100CF000206E6F742079657420696D706C656D6508 :100CEC0048656C6C6F2066726F6D205F6973617400
:100D00006E7465640A0000004552524F523A205FEB :100CFC0074790A004552524F523A205F6B696C6C02
:100D1000756E6C696E6B206E6F74207965742069D6 :100D0C00206E6F742079657420696D706C656D65EB
:100D20006D706C656D656E7465640A004552524F56 :100D1C006E7465640A0000004552524F523A205FCF
:100D3000523A205F67657474696D656F66646179A6 :100D2C00756E6C696E6B206E6F74207965742069BA
:100D4000206E6F742079657420696D706C656D65B7 :100D3C006D706C656D656E7465640A004552524F3A
:100D50006E7465640A0000004552524F523A205F9B :100D4C00523A205F67657474696D656F666461798A
:100D60006C696E6B206E6F742079657420696D708C :100D5C00206E6F742079657420696D706C656D659B
:0A0D70006C656D656E7465640A0021 :100D6C006E7465640A0000004552524F523A205F7F
:100D7C006C696E6B206E6F742079657420696D7070
:0A0D8C006C656D656E7465640A0005
:04100000500000801C :04100000500000801C
:1010080000000000F41200805C130080C41300800C :1010080000000000F41200805C130080C41300800C
:1010180000000000000000000000000000000000C8 :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 *>> vr1 = c.vreg[rsrc[0]];
vector<Reg<char *>> vr2 = c.vreg[rsrc[1]]; vector<Reg<char *>> vr2 = c.vreg[rsrc[1]];
vector<Reg<char *>> vd = c.vreg[rdest]; vector<Reg<char *>> vd = c.vreg[rdest];
vector<Reg<char *>> mask = c.vreg[0];
if (c.vtype.vsew == 8) 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) } 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) } else if (c.vtype.vsew == 32)
{ {
cout << "Doing 32 bit vector addition\n"; cout << "Doing 32 bit vector addition\n";
for (Word i = 0; i < c.vl; i++) for (Word i = 0; i < c.vl; i++)
{ {
int * first_ptr = (int *) vr1[i].val; int *mask_ptr = (int*) mask[i].val;
int * second_ptr = (int *) vr2[i].val; int value = (*mask_ptr & 0x1);
int result = *first_ptr + *second_ptr; if(vmask || (!vmask && value)){
cout << "Adding " << *first_ptr << " + " << *second_ptr << " = " << result << '\n'; 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; int * result_ptr = (int *) vd[i].val;
*result_ptr = result; *result_ptr = result;
}
} }
} }
@@ -1470,6 +1505,387 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
break; break;
} }
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: case 7:
{ {
is_vec = true; 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) for (int i = 0; i < (c.VLEN/vsew); ++i)
{ {
int * elem_ptr = (int *) malloc(vsew/8); 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)); c.vreg[j].push_back(Reg<char*>(c.id, regNum++, (char *) elem_ptr));
} }
} }