Readded IPDOM stack + SPLIT/Join tested

This commit is contained in:
felsabbagh3
2019-10-21 21:24:49 -04:00
parent 0672389edc
commit b6375e76de
15 changed files with 2204 additions and 2165 deletions

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -1,404 +1,406 @@
:0200000480007A :0200000480007A
:10000000130540006B000500F32500027326100263 :10000000130540006B000500F325000213A5250031
:1000100073000000938B0600130D0700130F0100FF :100010006B20050063060500130650006F0080008A
:100020009303050013051000635C75001301018044 :10002000130670006B30000073000000938B060015
:10003000130305006B500300130515006FF0DFFE7E :10003000130D0700130F01009303050013051000B3
:100040001300000013000000130000001300000064 :10004000635C750013010180130305006B5003000E
:10005000130000001300000013010F00130500003F :10005000130515006FF0DFFE130000001300000011
:10006000930F0600938D030013000000130000009F :100060001300000013000000130000001300000044
:100070001300000013000000130000001300000034 :1000700013010F0013050000930F0600938D03007A
:100080001300000013000000EBE0BF0113000000AC :100080001300000013000000130000001300000024
:100090001300000013000000130000001300000014 :100090001300000013000000130000001300000014
:1000A00013000000170500001305451B6B400500F9 :1000A000EBE0BF011300000013000000130000008C
:1000B00017030000130343F66B0003006780000082 :1000B00013000000130000001300000017050000EB
:1000C000170200011302022523200200232212003E :1000C0001305451B6B40050017030000130343F69F
:1000D000232422002326320023284200232A520010 :1000D0006B000300678000001702000113028223F7
:1000E000232C6200232E72002320820223229202FC :1000E0002320020023221200232422002326320090
:1000F0002324A2022326B2022328C202232AD202E8 :1000F00023284200232A5200232C6200232E720060
:10010000232CE202232EF2022320020523221205D1 :1001000023208202232292022324A2022326B20267
:10011000232422052326320523284205232A5205BB :100110002328C202232AD202232CE202232EF20237
:10012000232C6205232E72052320820723229207A7 :10012000232002052322120523242205232632053B
:100130002324A2072326B2072328C207232AD20793 :1001300023284205232A5205232C6205232E72050B
:10014000232CE207232EF207130210006780000021 :1001400023208207232292072324A2072326B20713
:10015000170200011302021C032002008320420048 :100150002328C207232AD207232CE207232EF207E3
:10016000032182008321C200032202018322420173 :100160001302100067800000170200011302821AB8
:10017000032382018323C201032402028324420257 :100170000320020083204200032182008321C20069
:10018000032582028325C20203260203832642033B :100180000322020183224201032382018323C2014D
:10019000032782038327C20303280204832842041F :100190000324020283244202032582028325C20231
:1001A000032982048329C204032A0205832A420503 :1001A0000326020383264203032782038327C20315
:1001B000032B8205832BC205032C0206832C4206E7 :1001B0000328020483284204032982048329C204F9
:1001C000032D8206832DC206032E0207832E4207CB :1001C000032A0205832A4205032B8205832BC205DD
:1001D000032F8207832FC2071302000067800000ED :1001D000032C0206832C4206032D8206832DC206C1
:1001E00073250002678000007325100267800000FD :1001E000032E0207832E4207032F8207832FC207A5
:1001F000130101FE232E1100232C810013040102A0 :1001F0001302000067800000732500026780000082
:10020000232604FE6F0040030327C4FEB717000037 :100200007325100267800000130101FE232E1100E8
:10021000938747973307F702B70700819387074112 :10021000232C810013040102232604FE6F004003F7
:10022000B307F70013850700EF0000448327C4FEDF :100220000327C4FEB7170000938747973307F702E9
:10023000938717002326F4FE0327C4FE9307F001DB :10023000B707008193870741B307F70013850700CD
:10024000E3D4E7FC130000008320C10103248101F3 :10024000EF0000448327C4FE938717002326F4FEA3
:100250001301010267800000130101FD2326110232 :100250000327C4FE9307F001E3D4E7FC130000007A
:10026000232481022322A1031304010313000000AD :100260008320C10103248101130101026780000082
:1002700013070D00B7170000938747973307F7025E :10027000130101FD23261102232481022322A1035D
:10028000B707008193870741B307F700138507007D :10028000130401031300000013070D00B71700004B
:10029000EF00405093070500638A070213070D0023 :10029000938747973307F702B70700819387074192
:1002A000B70700811317270093878726B307F70046 :1002A000B307F70013850700EF00405093070500E0
:1002B0001307100023A0E70093070D0063960700C3 :1002B000638A070213070D00B70700811317270091
:1002C000EFF01FE96F00C0057300000013070D0079 :1002C00093878726B307F7001307100023A0E700E2
:1002D000B7170000938747973307F702B7070081E6 :1002D00093070D0063960700EFF01FE96F00C0055C
:1002E00093870741B307F700130784FD93050700C1 :1002E0007300000013070D00B717000093874797AE
:1002F00013850700EF000040832704FE13810700E9 :1002F0003307F702B707008193870741B307F70079
:100300008327C4FD832584FD032644FE832684FEC3 :10030000130784FD9305070013850700EF000040E5
:100310000327C4FE13850700EFF0DFCF7300000052 :10031000832704FE138107008327C4FD832584FD02
:100320008320C10203248102032D41021301010332 :10032000032644FE832684FE0327C4FE13850700AC
:1003300067800000130101FB23261104232481049C :10033000EFF0DFCF730000008320C10203248102AD
:1003400013040105EFF0DFE92324A4FE9309010063 :10034000032D41021301010367800000130101FB2B
:10035000930710002326F4FE6F00C0080327C4FE95 :10035000232611042324810413040105EFF0DFE9AF
:10036000B7170000938747973307F702B707008155 :100360002324A4FE93090100930710002326F4FE22
:1003700093870741B307F70013850700EF0080411B :100370006F00C0080327C4FEB71700009387479794
:1003800093070500639A07040327C4FEB71700000C :100380003307F702B707008193870741B307F700E8
:10039000938747973307F702B70700819387074191 :1003900013850700EF00804193070500639A070467
:1003A000B307F700130704FD930507001385070043 :1003A0000327C4FEB7170000938747973307F70268
:1003B000EF004034832784FD13810700832744FD29 :1003B000B707008193870741B307F700130704FDD0
:1003C000832504FD0326C4FD832604FE032744FE83 :1003C0009305070013850700EF004034832784FD61
:1003D00013850700EFF0DFCD8327C4FE9387170056 :1003D00013810700832744FD832504FD0326C4FD04
:1003E0002326F4FE8327C4FE032784FEE3E8E7F612 :1003E000832604FE032744FE13850700EFF0DFCDCC
:1003F00013810900EFF0DFCC930702006388070444 :1003F0008327C4FE938717002326F4FE8327C4FEB9
:10040000B707008113850741EF00C0389307050047 :10040000032784FEE3E8E7F613810900EFF0DFCC71
:10041000639E0702930784FB93850700B70700815B :100410009307020063880704B7070081138507412B
:1004200013850741EF00002D832704FC138107008B :10042000EF00C03893070500639E0702930784FB23
:100430008327C4FB832584FB032644FC832684FC9A :1004300093850700B707008113850741EF00002D62
:100440000327C4FC13850700EFF0DFBC1300000096 :10044000832704FC138107008327C4FB832584FBD7
:100450008320C10403248104130101056780000087 :10045000032644FC832684FC0327C4FC1385070081
:10046000130101FB23261104232481041304010535 :10046000EFF0DFBC130000008320C10403248104EB
:10047000232EA4FA232CB4FA232AC4FA2328D4FA6C :100470001301010567800000130101FB232611040D
:10048000EFF01FD7EFF0DFD52322A4FE1309010000 :100480002324810413040105232EA4FA232CB4FA97
:10049000232604FE232404FE6F000009B709FFFF92 :10049000232AC4FA2328D4FAEFF01FD7EFF0DFD5D0
:1004A00033013101832784FE2326F4FC832784FB58 :1004A0002322A4FE13090100232604FE232404FEB4
:1004B0002328F4FC93070100232AF4FC832744FB40 :1004B0006F000009B709FFFF33013101832784FE74
:1004C000232CF4FC832704FB232EF4FC8327C4FE97 :1004C0002326F4FC832784FB2328F4FC93070100F4
:1004D0002320F4FE0327C4FEB71700009387479735 :1004D000232AF4FC832744FB232CF4FC832704FB0E
:1004E0003307F702B707008193870741B307F70087 :1004E000232EF4FC8327C4FE2320F4FE0327C4FE3E
:1004F0001307C4FC9305070013850700EF000019DC :1004F000B7170000938747973307F702B7070081C4
:100500008327C4FE938717002326F4FE8327C4FEA7 :1005000093870741B307F7001307C4FC930507005F
:10051000032744FE63E4E700232604FE832784FECA :1005100013850700EF0000198327C4FE9387170097
:10052000938717002324F4FE032784FE8327C4FB4C :100520002326F4FE8327C4FE032744FE63E4E7008A
:10053000E366F7F613010900EFF0DFDF13000000B8 :10053000232604FE832784FE938717002324F4FEDA
:100540008320C10403248104130101056780000096 :10054000032784FE8327C4FBE366F7F61301090043
:10055000130101FD23261102232481021304010348 :10055000EFF0DFDF130000008320C10403248104D7
:10056000232EA4FC8325C4FDB7070081138507044F :100560001301010567800000130101FD232611021C
:10057000EF004035EFF0DFC62320A4FE232604FE63 :100570002324810213040103232EA4FC8325C4FD3C
:100580006F008006930710002326F4FE232404FE48 :10058000B707008113850704EF004035EFF0DFC6A1
:100590006F00C003B7070081032784FE13172700ED :100590002320A4FE232604FE6F008006930710008C
:1005A00093878726B307F70003A707009307100078 :1005A0002326F4FE232404FE6F00C003B707008156
:1005B0006318F7008327C4FE938717002326F4FEF1 :1005B000032784FE1317270093878726B307F700C6
:1005C000832784FE938717002324F4FE032784FEE9 :1005C00003A70700930710006318F7008327C4FEF2
:1005D0009307F001E3D0E7FC8325C4FEB707008151 :1005D000938717002326F4FE832784FE9387170052
:1005E0001385C704EF00002E0327C4FE8327C4FD34 :1005E0002324F4FE032784FE9307F001E3D0E7FC05
:1005F000E36AF7F8232204FE6F008002B707008148 :1005F0008325C4FEB70700811385C704EF00002ED2
:10060000032744FE1317270093878726B307F700B5 :100600000327C4FE8327C4FDE36AF7F8232204FE10
:1006100023A00700832744FE938717002322F4FEBC :100610006F008002B7070081032744FE13172700ED
:10062000832744FE032704FEE3EAE7FC13000000EF :1006200093878726B307F70023A00700832744FE9C
:100630008320C102032481021301010367800000AB :10063000938717002322F4FE832744FE032704FE3A
:10064000130101FF232681002324710113040101FA :10064000E3EAE7FC130000008320C10203248102D7
:1006500093870B00138507000324C100832B8100BF :100650001301010367800000130101FF23268100BD
:1006600013010101678000009302050013030000DD :10066000232471011304010193870B0013850700F4
:100670009303700023A0620023A2620023A46200FF :100670000324C100832B8100130101016780000066
:1006800023A6720023A86200678000009302050081 :1006800093020500130300009303700023A062008F
:1006900003A382001303130023A462001383420107 :1006900023A2620023A4620023A6720023A86200A2
:1006A00083AE420093935E003303730003AE0500F4 :1006A000678000009302050003A382001303130078
:1006B0002320C30103AE45002322C30103AE8500FE :1006B00023A462001383420183AE420093935E0041
:1006C0002324C30103AEC5002326C30103AE0501E5 :1006C0003303730003AE05002320C30103AE4500CE
:1006D0002328C30103AE4501232AC301938E1E00C4 :1006D0002322C30103AE85002324C30103AEC5005A
:1006E000130F20036394EE01930E000023A2D201A6 :1006E0002326C30103AE05012328C30103AE450140
:1006F000678000009302050003A38200130000003E :1006F000232AC301938E1E00130F20036394EE017F
:10070000130000001300000013000000130000009D :10070000930E000023A2D20167800000930205002F
:10071000130000001303F3FF23A4620013834201BC :1007100003A3820013000000130000001300000078
:1007200083AE0200930F2003138F0E00130F1F00E0 :100720001300000013000000130000001303F3FF88
:100730006314FF01130F000023A0E20193935E00F6 :1007300023A462001383420183AE0200930F2003BF
:1007400033037300032E030023A0C501032E4300CF :10074000138F0E00130F1F006314FF01130F00001F
:1007500023A2C501032E830023A4C501032EC300D9 :1007500023A0E20193935E0033037300032E030092
:1007600023A6C501032E030123A8C501032E4301BF :1007600023A0C501032E430023A2C501032E83004D
:1007700023AAC501678000009302050003A382003D :1007700023A4C501032EC30023A6C501032E030134
:1007800013050000130E200363146E0013051500FB :1007800023A8C501032E430123AAC50167800000E9
:10079000678000009302050003A382001305000098 :100790009302050003A3820013050000130E20033B
:1007A000130E000063146E0013051500678000002F :1007A00063146E00130515006780000093020500B6
:1007B0009302050003A3C20083A3020133B56300C3 :1007B00003A3820013050000130E000063146E00F3
:1007C00067800000130141FF232011002322B100A4 :1007C00013051500678000009302050003A3C20013
:1007D0008345050063880500EF00C001130515007F :1007D00083A3020133B5630067800000130141FF6A
:1007E0006FF01FFF83200100832541001301C1002A :1007E000232011002322B100834505006388050002
:1007F00067800000B708010023A0B80067800000F0 :1007F000EF00C001130515006FF01FFF83200100FB
:10080000130101FD23261102232481021304010395 :10080000832541001301C10067800000B708010083
:10081000232EA4FC0327C4FD9307F00063E4E70242 :1008100023A0B80067800000130101FD2326110208
:10082000B70700810327C4FD131727009387871A92 :100820002324810213040103232EA4FC0327C4FD07
:10083000B307F70083A7070013850700EFF09FF8C1 :100830009307F00063E4E702B70700810327C4FDD4
:100840006F004007930700022326F4FEA30504FE71 :10084000131727009387871AB307F70083A70700BA
:100850008327C4FE9387C7FF0327C4FDB357F70060 :1008500013850700EFF09FF86F0040079307000231
:1008600093F7F7002322F4FE832744FE63860700F4 :100860002326F4FEA30504FE8327C4FE9387C7FF57
:1008700093071000A305F4FE8347B4FE63820702CA :100870000327C4FDB357F70093F7F7002322F4FED4
:10088000B7070081032744FE131727009387871AB1 :10088000832744FE6386070093071000A305F4FE48
:10089000B307F70083A7070013850700EFF09FF267 :100890008347B4FE63820702B7070081032744FE43
:1008A0008327C4FE9387C7FF2326F4FE8327C4FE55 :1008A000131727009387871AB307F70083A707005A
:1008B000E340F0FA8320C102032481021301010303 :1008B00013850700EFF09FF28327C4FE9387C7FFDD
:1008C00067800000130101FE232E1100232C8100FC :1008C0002326F4FE8327C4FEE340F0FA8320C1020E
:1008D000130401022326A4FE2324B4FE0325C4FE30 :1008D000032481021301010367800000130101FE5C
:1008E000EFF05FEE032584FEEFF09FF1B707008184 :1008E000232E1100232C8100130401022326A4FED1
:1008F00013854709EFF01FED130000008320C101AD :1008F0002324B4FE0325C4FEEFF05FEE032584FE3F
:10090000032481011301010267800000130101FD2E :10090000EFF09FF1B707008113854709EFF01FED66
:10091000232611022324810213040103232EA4FCA5 :10091000130000008320C10103248101130101029F
:10092000232CB4FC232AC4FC2328D4FCB7670281FF :1009200067800000130101FD2326110223248102A8
:100930000327C4FD23ACE71AB76702819387871B9F :1009300013040103232EA4FC232CB4FC232AC4FC9F
:10094000032784FD23A2E700B76702819387871BF3 :100940002328D4FCB76702810327C4FD23ACE71A30
:10095000032744FD23A4E700B76702819387871B21 :10095000B76702819387871B032784FD23A2E700E3
:10096000032704FD23A6E700EFF01F882324A4FE3D :10096000B76702819387871B032744FD23A4E70011
:10097000032704FD832784FEB357F7022326F4FEE2 :10097000B76702819387871B032704FD23A6E7003F
:10098000032704FD832784FEB377F70263880700FB :10098000EFF01F882324A4FE032704FD832784FEA1
:100990008327C4FE938717002326F4FEB7670281DE :10099000B357F7022326F4FE032704FD832784FEC2
:1009A0009387871B0327C4FE23A8E700032704FDC2 :1009A000B377F702638807008327C4FE9387170095
:1009B000832784FE6362F702B76702819386871BF1 :1009B0002326F4FEB76702819387871B0327C4FEB3
:1009C000B7170080138607A3832584FE032504FD43 :1009C00023A8E700032704FD832784FE6362F70260
:1009D000EFF01FA96F000002B76702819386871BA3 :1009D000B76702819386871BB7170080138687A4A9
:1009E000B7170080138607A3832504FD032504FDA4 :1009E000832584FE032504FDEFF01FA96F0000029C
:1009F000EFF01FA7EFF0CFFE2322A4FE032704FD94 :1009F000B76702819386871BB7170080138687A489
:100A0000832744FE63F8E700032544FEEFF05FB45C :100A0000832504FD032504FDEFF01FA7EFF0CFFEC3
:100A10006F00C000032504FDEFF09FB3130000003A :100A10002322A4FE032704FD832744FE63F8E70096
:100A20008320C102032481021301010367800000B7 :100A2000032544FEEFF05FB46F00C000032504FD12
:100A3000130101FA232E1104232C8104130401064F :100A3000EFF09FB3130000008320C1020324810262
:100A40002326A4FA2324B4FAEFF09FBF232CA4FC9E :100A40001301010367800000130101FA232E110432
:100A5000832784FD83A70700232AF4FC832784FDD2 :100A5000232C8104130401062326A4FA2324B4FAC8
:100A600083A747002328F4FC832784FD83A78700FE :100A6000EFF09FBF232CA4FC832784FD83A70700FE
:100A70002326F4FC832784FD83A707012326F4FEA5 :100A7000232AF4FC832784FD83A747002328F4FC62
:100A80000327C4FE8327C4FAB307F7022324F4FE26 :100A8000832784FD83A787002326F4FC832784FD26
:100A90008327C4FE639A0700930710002326F4FE01 :100A900083A707012326F4FE0327C4FE8327C4FA95
:100AA0008327C4FA2324F4FE832784FD83A7C70089 :100AA000B307F7022324F4FE8327C4FE639A0700EA
:100AB0002324F4FC232204FE6F00800D232004FE77 :100AB000930710002326F4FE8327C4FA2324F4FEB0
:100AC000232E04FC6F008007032784FA832784FC0D :100AC000832784FD83A7C7002324F4FC232204FE8C
:100AD000B307F7020327C4FDB307F7002322F4FC92 :100AD0006F00800D232004FE232E04FC6F0080078E
:100AE000032784FC8327C4FDB307F702032784FE92 :100AE000032784FA832784FCB307F7020327C4FD96
:100AF000B307F7002320F4FC832744FC93972700D7 :100AF000B307F7002322F4FC032784FC8327C4FDFB
:100B0000032744FDB307F70003A70700832704FC6E :100B0000B307F702032784FEB307F7002320F4FCA2
:100B100093972700832604FDB387F60083A7070079 :100B1000832744FC93972700032744FDB307F7007E
:100B2000B307F702032704FEB307F7002320F4FE00 :100B200003A70700832704FC93972700832604FD6F
:100B30008327C4FD93871700232EF4FC0327C4FDED :100B3000B387F60083A70700B307F702032704FE75
:100B4000832784FCE362F7F8032784FA832784FC75 :100B4000B307F7002320F4FE8327C4FD9387170023
:100B50003307F702832784FEB307F700232EF4FA46 :100B5000232EF4FC0327C4FD832784FCE362F7F80B
:100B60008327C4FB939727000327C4FCB307F70030 :100B6000032784FA832784FC3307F702832784FE54
:100B7000032704FE23A0E700832784FE9387170042 :100B7000B307F700232EF4FA8327C4FB93972700CB
:100B80002324F4FE832744FE938717002322F4FED8 :100B80000327C4FCB307F700032704FE23A0E700F4
:100B9000832744FE0327C4FEE3E2E7F213000000CC :100B9000832784FE938717002324F4FE832744FED3
:100BA0008320C1050324810513010106678000002D :100BA000938717002322F4FE832744FE0327C4FE05
:100BB000130101FC232E1102232C810213040104D2 :100BB000E3E2E7F2130000008320C105032481056E
:100BC000232EA4FC232CB4FC232AC4FC2328D4FC0D :100BC0001301010667800000130101FC232E1102AE
:100BD0002326E4FCB76702810327C4FD23A6E71C94 :100BD000232C810213040104232EA4FC232CB4FC37
:100BE000B76702819387C71C032784FD23A2E70010 :100BE000232AC4FC2328D4FC2326E4FCB767028113
:100BF000B76702819387C71C032744FD23A4E7003E :100BF0000327C4FD23A6E71CB76702819387C71CA0
:100C0000B76702819387C71C0327C4FC23A6E700AC :100C0000032784FD23A2E700B76702819387C71CEF
:100C1000B76702819387C71C032704FD23A8E70059 :100C1000032744FD23A4E700B76702819387C71C1D
:100C2000EFF08FDC2324A4FE0327C4FC832784FE7B :100C20000327C4FC23A6E700B76702819387C71C8C
:100C3000B357F7022326F4FE0327C4FC832784FE60 :100C3000032704FD23A8E700EFF08FDC2324A4FEA4
:100C4000B377F702638807008327C4FE93871700F2 :100C40000327C4FC832784FEB357F7022326F4FE50
:100C50002326F4FEB76702819387C71C0327C4FECF :100C50000327C4FC832784FEB377F7026388070069
:100C600023AAE7000327C4FC832784FE6362F702FC :100C60008327C4FE938717002326F4FEB76702810B
:100C7000B76702819386C71CB7170080138687CE9B :100C70009387C71C0327C4FE23AAE7000327C4FCED
:100C8000832584FE032504FDEFF08FFD6F00000235 :100C8000832784FE6362F702B76702819386C71CDD
:100C9000B76702819386C71CB7170080138687CE7B :100C9000B7170080138607D0832584FE032504FD43
:100CA0008325C4FC032504FDEFF08FFBEFF04FD349 :100CA000EFF08FFD6F000002B76702819386C71CCB
:100CB0002322A4FE032704FD832744FE63F8E700F4 :100CB000B7170080138607D08325C4FC032504FDE5
:100CC000032544FEEFF0DF886F00C000032504FD1C :100CC000EFF08FFBEFF04FD32322A4FE032704FDA8
:100CD000EFF01F88130000008320C1030324810369 :100CD000832744FE63F8E700032544FEEFF0DF8836
:100CE0001301010467800000130101FB2326110496 :100CE0006F00C000032504FDEFF01F881300000013
:100CF0002324810413040105232EA4FA232CB4FA1F :100CF0008320C103032481031301010467800000E2
:100D0000EFF01F942320A4FE832704FE83A707008F :100D0000130101FB2326110423248104130401058C
:100D1000232EF4FC832704FE83A74700232CF4FC36 :100D1000232EA4FA232CB4FAEFF01F942320A4FE70
:100D2000832704FE83A78700232AF4FC832704FE7D :100D2000832704FE83A70700232EF4FC832704FEF9
:100D300083A747012326F4FE0327C4FE8327C4FBB1 :100D300083A74700232CF4FC832704FE83A78700A6
:100D4000B307F7022324F4FE8327C4FE639A070047 :100D4000232AF4FC832704FE83A747012326F4FE0D
:100D5000930710002326F4FE8327C4FB2324F4FE0C :100D50000327C4FE8327C4FBB307F7022324F4FE52
:100D6000832704FE83A7C7002328F4FC232204FE64 :100D60008327C4FE639A0700930710002326F4FE2E
:100D70006F00000C032784FB832704FD3307F70271 :100D70008327C4FB2324F4FE832704FE83A7C70034
:100D8000832784FEB307F7002326F4FC032784FEA1 :100D80002328F4FC232204FE6F00000C032784FBBD
:100D9000832704FDB337F70093F7F70F2324F4FC00 :100D9000832704FD3307F702832784FEB307F70098
:100DA000832784FC93B71700A303F4FC834774FCE8 :100DA0002326F4FC032784FE832704FDB337F700D2
:100DB000138F0700B7170080938FC7E16B200F00D8 :100DB00093F7F70F2324F4FC832784FC93B71700E1
:100DC0007B70FF018327C4FC939727000327C4FD92 :100DC000A303F4FC834774FC138F0700B71700805C
:100DD000B307F70083A607008327C4FC9397270077 :100DD000938F47E36B200F007B70FF018327C4FCD8
:100DE000032784FDB307F70003A707008327C4FC8C :100DE000939727000327C4FDB307F70083A60700E6
:100DF00093972700032644FDB307F6003387E600E8 :100DF0008327C4FC93972700032784FDB307F700DC
:100E000023A0E700832784FE938717002324F4FEA2 :100E000003A707008327C4FC93972700032644FD0C
:100E1000B7170080138E07E267000E001300000072 :100E1000B307F6003387E60023A0E700832784FEAC
:100E20006B300000832744FE938717002322F4FED3 :100E2000938717002324F4FEB7170080138E87E3FF
:100E3000832744FE0327C4FEE3EEE7F2130000001D :100E300067000E00130000006B300000832744FEA3
:100E40008320C1040324810413010105678000008D :100E4000938717002322F4FE832744FE0327C4FE62
:100E5000130101FC232E1102232C8102130401042F :100E5000E3EEE7F2130000008320C10403248104C1
:100E6000232EA4FC232CB4FC232AC4FC2328D4FC6A :100E60001301010567800000130101FC232E11020C
:100E70002326E4FCB76702810327C4FD23A6E71CF1 :100E7000232C810213040104232EA4FC232CB4FC94
:100E8000B76702819387C71C032784FD23A2E7006D :100E8000232AC4FC2328D4FC2326E4FCB767028170
:100E9000B76702819387C71C032744FD23A4E7009B :100E90000327C4FD23A6E71CB76702819387C71CFD
:100EA000B76702819387C71C0327C4FC23A6E7000A :100EA000032784FD23A2E700B76702819387C71C4D
:100EB000B76702819387C71C032704FD23A8E700B7 :100EB000032744FD23A4E700B76702819387C71C7B
:100EC000EFF08FB22324A4FE0327C4FC832784FE03 :100EC0000327C4FC23A6E700B76702819387C71CEA
:100ED000B357F7022326F4FE0327C4FC832784FEBE :100ED000032704FD23A8E700EFF08FB22324A4FE2C
:100EE000B377F702638807008327C4FE9387170050 :100EE0000327C4FC832784FEB357F7022326F4FEAE
:100EF0002326F4FEB76702819387C71C0327C4FE2D :100EF0000327C4FC832784FEB377F70263880700C7
:100F000023AAE7000327C4FC832784FE6362F70259 :100F00008327C4FE938717002326F4FEB767028168
:100F1000B76702819386C71CB7170080138687F8CE :100F10009387C71C0327C4FE23AAE7000327C4FC4A
:100F2000832584FE032504FDEFF08FD36F000002BC :100F2000832784FE6362F702B76702819386C71C3A
:100F3000B76702819386C71CB7170080138687F8AE :100F3000B7170080138607FA832584FE032504FD76
:100F40008325C4FC032504FDEFF08FD1EFF04FA9FA :100F4000EFF08FD36F000002B76702819386C71C52
:100F50002322A4FE032704FD832744FE63F8E70051 :100F5000B7170080138607FA8325C4FC032504FD18
:100F6000032544FEEFF0CFDE6F00C000032504FD33 :100F6000EFF08FD1EFF04FA92322A4FE032704FD59
:100F7000EFF00FDE130000008320C1030324810380 :100F7000832744FE63F8E700032544FEEFF0CFDE4D
:100F80001301010467800000130101FB23261104F3 :100F80006F00C000032504FDEFF00FDE130000002A
:100F90002324810413040105232EA4FA232CB4FA7C :100F90008320C1030324810313010104678000003F
:100FA000EFF00FEA2320A4FE832704FE83A70700A7 :100FA000130101FB232611042324810413040105EA
:100FB000232EF4FC832704FE83A74700232CF4FC94 :100FB000232EA4FA232CB4FAEFF00FEA2320A4FE88
:100FC000832704FE83A78700232AF4FC832704FEDB :100FC000832704FE83A70700232EF4FC832704FE57
:100FD00083A747012326F4FE0327C4FE8327C4FB0F :100FD00083A74700232CF4FC832704FE83A7870004
:100FE000B307F7022324F4FE8327C4FE639A0700A5 :100FE000232AF4FC832704FE83A747012326F4FE6B
:100FF000930710002326F4FE8327C4FB2324F4FE6A :100FF0000327C4FE8327C4FBB307F7022324F4FEB0
:10100000832704FE83A7C7002328F4FC232204FEC1 :101000008327C4FE639A0700930710002326F4FE8B
:101010006F00000C032784FB832704FD3307F702CE :101010008327C4FB2324F4FE832704FE83A7C70091
:10102000832784FEB307F7002326F4FC032784FEFE :101020002328F4FC232204FE6F00000C032784FB1A
:10103000832704FDB337F70093F7F70F2324F4FC5D :10103000832704FD3307F702832784FEB307F700F5
:10104000832784FC93B71700A303F4FC834774FC45 :101040002326F4FC032784FE832704FDB337F7002F
:10105000138F0700B7170080938FC70B6B200F000B :1010500093F7F70F2324F4FC832784FC93B717003E
:101060007B70FF018327C4FC939727000327C4FDEF :10106000A303F4FC834774FC138F0700B7170080B9
:10107000B307F70083A607008327C4FC93972700D4 :10107000938F470D6B200F007B70FF018327C4FC0B
:10108000032784FDB307F70003A707008327C4FCE9 :10108000939727000327C4FDB307F70083A6070043
:1010900093972700032644FDB307F6003387E64005 :101090008327C4FC93972700032784FDB307F70039
:1010A00023A0E700832784FE938717002324F4FE00 :1010A00003A707008327C4FC93972700032644FD6A
:1010B000B7170080138E070C67000E0013000000A6 :1010B000B307F6003387E64023A0E700832784FECA
:1010C0006B300000832744FE938717002322F4FE31 :1010C000938717002324F4FEB7170080138E870D33
:1010D000832744FE0327C4FEE3EEE7F2130000007B :1010D00067000E00130000006B300000832744FE01
:1010E0008320C104032481041301010567800000EB :1010E000938717002322F4FE832744FE0327C4FEC0
:1010F000130101FC232E1102232C8102130401048D :1010F000E3EEE7F2130000008320C104032481041F
:10110000232EA4FC232CB4FC232AC4FC2328D4FCC7 :101100001301010567800000130101FC232E110269
:101110002326E4FCB76702810327C4FD23A2E71E50 :10111000232C810213040104232EA4FC232CB4FCF1
:10112000B76702819387471E032784FD23A2E70048 :10112000232AC4FC2328D4FC2326E4FCB7670281CD
:10113000B76702819387471E032744FD23A4E70076 :101130000327C4FD23A2E71EB76702819387471EDA
:10114000B76702819387471E0327C4FC23A6E700E5 :10114000032784FD23A2E700B76702819387471E28
:10115000B76702819387471E032704FD23A8E70092 :10115000032744FD23A4E700B76702819387471E56
:10116000EFF08F882324A4FE0327C4FC832784FE8A :101160000327C4FC23A6E700B76702819387471EC5
:10117000B357F7022326F4FE0327C4FC832784FE1B :10117000032704FD23A8E700EFF08F882324A4FEB3
:10118000B377F702638807008327C4FE93871700AD :101180000327C4FC832784FEB357F7022326F4FE0B
:101190002326F4FEB76702819387471E0327C4FE08 :101190000327C4FC832784FEB377F7026388070024
:1011A00023AAE7000327C4FC832784FE6362F702B7 :1011A0008327C4FE938717002326F4FEB7670281C6
:1011B000B76702819386471EB71700801386872280 :1011B0009387471E0327C4FE23AAE7000327C4FC26
:1011C000832584FE032504FDEFF08FA96F00000244 :1011C000832784FE6362F702B76702819386471E16
:1011D000B76702819386471EB71700801386872260 :1011D000B717008013860724832584FE032504FDAA
:1011E0008325C4FC032504FDEFF08FA7EFE05FFF2C :1011E000EFF08FA96F000002B76702819386471E58
:1011F0002322A4FE032704FD832744FE63F8E700AF :1011F000B7170080138607248325C4FC032504FD4C
:10120000032544FEEFF0CFB46F00C000032504FDBA :10120000EFF08FA7EFE05FFF2322A4FE032704FD8A
:10121000EFF00FB4130000008320C1030324810307 :10121000832744FE63F8E700032544FEEFF0CFB4D4
:101220001301010467800000130101FB2326110450 :101220006F00C000032504FDEFF00FB413000000B1
:101230002324810413040105232EA4FA232CB4FAD9 :101230008320C1030324810313010104678000009C
:10124000EFF00FC02320A4FE832704FE83A707002E :10124000130101FB23261104232481041304010547
:10125000232EF4FC832704FE83A7470083A70700FF :10125000232EA4FA232CB4FAEFF00FC02320A4FE0F
:10126000232CF4FC832704FE83A78700232AF4FCA5 :10126000832704FE83A70700232EF4FC832704FEB4
:10127000832704FE83A747012326F4FE0327C4FE29 :1012700083A7470083A70700232CF4FC832704FEE1
:101280008327C4FBB307F7022324F4FE8327C4FE9D :1012800083A78700232AF4FC832704FE83A7470152
:10129000639A0700930710002326F4FE8327C4FBFC :101290002326F4FE0327C4FE8327C4FBB307F7020B
:1012A0002324F4FE832704FE83A7C7002328F4FC2D :1012A0002324F4FE8327C4FE639A070093071000EB
:1012B000232204FE6F00000B032784FB832704FD19 :1012B0002326F4FE8327C4FB2324F4FE832704FEA5
:1012C0003307F702832784FEB307F7002326F4FCD5 :1012C00083A7C7002328F4FC232204FE6F00000B31
:1012D000032784FE832704FDB337F70093F7F70F46 :1012D000032784FB832704FD3307F702832784FE5B
:1012E0002324F4FC832784FC93B71700A303F4FCA6 :1012E000B307F7002326F4FC032784FE832704FDBD
:1012F000834774FC138F0700B7170080938F07355F :1012F000B337F70093F7F70F2324F4FC832784FC1C
:101300006B200F007B70FF018327C4FC939727009D :1013000093B71700A303F4FC834774FC138F070003
:101310000327C4FDB307F70083A607008327C4FC97 :10131000B7170080938F87366B200F007B70FF011B
:1013200093972700032744FDB307F700032784FDA5 :101320008327C4FC939727000327C4FDB307F70066
:101330003387E60023A0E700832784FE9387170006 :1013300083A607008327C4FC93972700032744FD57
:101340002324F4FEB7170080138E473567000E0084 :10134000B307F700032784FD3387E60023A0E700F7
:10135000130000006B300000832744FE93871700C2 :10135000832784FE938717002324F4FEB7170080A9
:101360002322F4FE832744FE0327C4FEE3E6E7F4CA :10136000138EC73667000E00130000006B300000BC
:10137000130000008320C10403248104130101052C :10137000832744FE938717002322F4FE832744FE2D
:1013800067800000130101FC232E1102232C81022F :101380000327C4FEE3E6E7F4130000008320C10452
:1013900013040104232EA4FC232CB4FC232AC4FC34 :10139000032481041301010567800000130101FC8F
:1013A0002328D4FC2326E4FCB76702810327C4FD6D :1013A000232E1102232C810213040104232EA4FCFA
:1013B00023A2E71EB76702819387471E032784FD98 :1013B000232CB4FC232AC4FC2328D4FC2326E4FCDD
:1013C00023A2E700B76702819387471E032744FDE6 :1013C000B76702810327C4FD23A2E71EB767028126
:1013D00023A4E700B76702819387471E0327C4FC55 :1013D0009387471E032784FD23A2E700B767028196
:1013E00023A6E700B76702819387471E032704FD02 :1013E0009387471E032744FD23A4E700B7670281C4
:1013F00023A8E700EFE05FDF2324A4FE0327C4FC5B :1013F0009387471E0327C4FC23A6E700B767028133
:10140000832784FEB357F7022326F4FE0327C4FC88 :101400009387471E032704FD23A8E700EFE05FDF73
:10141000832784FEB377F702638807008327C4FE1F :101410002324A4FE0327C4FC832784FEB357F702CA
:10142000938717002326F4FEB76702819387471E30 :101420002326F4FE0327C4FC832784FEB377F70248
:101430000327C4FE23AAE7000327C4FC832784FEF6 :10143000638807008327C4FE938717002326F4FEE2
:101440006362F702B76702819386471EB717008071 :10144000B76702819387471E0327C4FE23AAE700DC
:101450001386C74B832584FE032504FDEFF04F80E0 :101450000327C4FC832784FE6362F702B767028117
:101460006F000002B76702819386471EB71700809E :101460009386471EB71700801386474D832584FE59
:101470001386C74B8325C4FC032504FDEFE05FFE04 :10147000032504FDEFF04F806F000002B767028183
:10148000EFE01FD62322A4FE032704FD832744FE9A :101480009386471EB71700801386474D8325C4FCFB
:1014900063F8E700032544FEEFF08F8B6F00C00078 :10149000032504FDEFE05FFEEFE01FD62322A4FE4C
:1014A000032504FDEFF0CF8A130000008320C10361 :1014A000032704FD832744FE63F8E700032544FE79
:1014B000032481031301010467800000130101FB71 :1014B000EFF08F8B6F00C000032504FDEFF0CF8AA3
:1014C000232611042324810413040105232EA4FAE6 :1014C000130000008320C1030324810313010104DE
:1014D000232CB4FAEFF0CF962320A4FE832704FE3A :1014D00067800000130101FB2326110423248104EB
:1014E00083A70700232EF4FC832704FE83A747006D :1014E00013040105232EA4FA232CB4FAEFF0CF96AF
:1014F00083A70700232CF4FC832704FE83A787001F :1014F0002320A4FE832704FE83A70700232EF4FCE9
:10150000232AF4FC832704FE83A747012326F4FE45 :10150000832704FE83A7470083A70700232CF4FC4E
:101510000327C4FE8327C4FBB307F7022324F4FE8A :10151000832704FE83A78700232AF4FC832704FE85
:101520008327C4FE639A0700930710002326F4FE66 :1015200083A747012326F4FE0327C4FE8327C4FBB9
:101530008327C4FB2324F4FE832704FE83A7C7006C :10153000B307F7022324F4FE8327C4FE639A07004F
:101540002328F4FC232204FE6F00000B032784FBF6 :10154000930710002326F4FE8327C4FB2324F4FE14
:10155000832704FD3307F702832784FEB307F700D0 :10155000832704FE83A7C7002328F4FC232204FE6C
:101560002326F4FC032784FE832704FDB337F7000A :101560006F00000B032784FB832704FD3307F7027A
:1015700093F7F70F2324F4FC832784FC93B7170019 :10157000832784FEB307F7002326F4FC032784FEA9
:10158000A303F4FC834774FC138F0700B717008094 :10158000832704FDB337F70093F7F70F2324F4FC08
:10159000938F475E6B200F007B70FF018327C4FC95 :10159000832784FC93B71700A303F4FC834774FCF0
:1015A000939727000327C4FDB307F70083A607001E :1015A000138F0700B7170080938FC75F6B200F0062
:1015B0008327C4FC93972700032744FDB307F70054 :1015B0007B70FF018327C4FC939727000327C4FD9A
:1015C000032784FD3387E60223A0E700832784FEF8 :1015C000B307F70083A607008327C4FC939727007F
:1015D000938717002324F4FEB7170080138E875ECD :1015D000032744FDB307F700032784FD3387E602A2
:1015E00067000E00130000006B300000832744FEEC :1015E00023A0E700832784FE938717002324F4FEBB
:1015F000938717002322F4FE832744FE0327C4FEAB :1015F000B7170080138E076067000E00130000000D
:10160000E3E6E7F4130000008320C104032481040F :101600006B300000832744FE938717002322F4FEEB
:101610001301010567800000130101FD23268102EB :10161000832744FE0327C4FEE3E6E7F4130000003B
:1016200013040103232EA4FC232604FE6F000001F3 :101620008320C104032481041301010567800000A5
:101630008327C4FE938717002326F4FE0327C4FEE6 :10163000130101FD2326810213040103232EA4FCC0
:101640008327C4FDE346F7FE130000000324C10214 :10164000232604FE6F0000018327C4FE9387170042
:101650001301010367800000130101FD232611021D :101650002326F4FE0327C4FE8327C4FDE346F7FEDA
:101660002324810213040103232EA4FC232CB4FCA5 :10166000130000000324C10213010103678000007E
:10167000B76702811387C71F8327C4FDB307F7002D :10167000130101FD23261102232481021304010317
:10168000130710002380E7008327C4FD6390070C35 :10168000232EA4FC232CB4FCB76702811387C71F49
:10169000A30104FE232604FE6F00800A232604FE15 :101690008327C4FDB307F700130710002380E7007A
:1016A000232404FE6F004003B76702811387C71F1E :1016A0008327C4FD6390070CA30104FE232604FED8
:1016B000832784FEB307F70083C70700638807000A :1016B0006F00800A232604FE232404FE6F004003EB
:1016C0008327C4FE938717002326F4FE832784FE16 :1016C000B76702811387C71F832784FEB307F7001C
:1016D000938717002324F4FE032784FE832784FDC9 :1016D00083C70700638807008327C4FE938717002A
:1016E000E344F7FC0327C4FE832784FD631AF70451 :1016E0002326F4FE832784FE938717002324F4FE29
:1016F000232204FE6F000004B76702811387C71F0F :1016F000032784FE832784FDE344F7FC0327C4FE0D
:10170000832744FEB307F70023800700B7970281C1 :10170000832784FD631AF704232204FE6F0000047C
:10171000130710002382E72C13056004EFF0DFEFBE :10171000B76702811387C71F832744FEB307F7000B
:10172000B79702812382072C832744FE93871700F3 :1017200023800700B7970281130710002382E72C5C
:101730002322F4FE032744FE832784FDE34EF7FAB9 :1017300013056004EFF0DFEFB79702812382072CD7
:10174000834734FEE39C07F46F004002130000005F :10174000832744FE938717002322F4FE032744FED9
:10175000B797028183C7472C93C7170093F7F70FFA :10175000832784FDE34EF7FA834734FEE39C07F4C6
:10176000E39807FE13054006EFF01FEB130000009F :101760006F00400213000000B797028183C7472C27
:101770008320C1020324810213010103678000005A :1017700093C7170093F7F70FE39807FE130540068A
:10178000130101FF232681001304010193070000C8 :10178000EFF01FEB130000008320C102032481024D
:101790001308000013850700930508000324C10007 :101790001301010367800000130101FF232681006C
:1017A0001301010167800000130101FE232E810057 :1017A00013040101930700001308000013850700CC
:1017B00013040102232604FE6F008004B767028130 :1017B000930508000324C1001301010167800000A4
:1017C0000327C4FE131727009387C721B307F70029 :1017C000130101FE232E810013040102232604FECF
:1017D0001307300023A0E700B77702810327C4FE78 :1017D0006F008004B76702810327C4FE1317270038
:1017E000131727009387C721B307F70013072000BB :1017E0009387C721B307F7001307300023A0E70052
:1017F00023A0E7008327C4FE938717002326F4FE67 :1017F000B77702810327C4FE131727009387C721F9
:101800000327C4FE9307F00FE3DAE7FA13000000A2 :10180000B307F7001307200023A0E7008327C4FED7
:101810000324C1011301010267800000130101FDCF :10181000938717002326F4FE0327C4FE9307F00FD7
:10182000232611022324810213040103232EA4FC86 :10182000E3DAE7FA130000000324C1011301010207
:10183000B707008113858711EFE0DFF8232604FE48 :1018300067800000130101FD232611022324810289
:101840006F0080058327C4FE638E07008327C4FED4 :1018400013040103232EA4FCB7070081138587111D
:1018500093F7F70063980700B70700811385C71354 :10185000EFE0DFF8232604FE6F0080058327C4FE37
:10186000EFE05FF68327C4FE939727000327C4FDAC :10186000638E07008327C4FE93F7F7006398070091
:10187000B307F70083A7070013850700EFE05FF8C1 :10187000B70700811385C713EFE05FF68327C4FE27
:10188000B707008113850714EFE0DFF38327C4FE59 :10188000939727000327C4FDB307F70083A707003A
:10189000938717002326F4FE0327C4FE9307F00F57 :1018900013850700EFE05FF8B70700811385071491
:1018A000E3D2E7FAB707008113854714EFE09FF111 :1018A000EFE0DFF38327C4FE938717002326F4FEBF
:1018B000130000008320C1020324810213010103ED :1018B0000327C4FE9307F00FE3D2E7FAB7070081CE
:1018C00067800000130101FF2326110023248100FB :1018C00013854714EFE09FF1130000008320C1024D
:1018D00013040101EFF05FEDB76702811385C721A3 :1018D000032481021301010367800000130101FF4B
:1018E000EFF0DFF393070000138507008320C100AA :1018E000232611002324810013040101EFF05FED92
:0C18F00003248100130101016780000047 :1018F000B76702811385C721EFF0DFF3930700007C
:10190000138507008320C100032481001301010116
:0419100067800000EC
:02000004810079 :02000004810079
:10000000300000003100000032000000330000002A :10000000300000003100000032000000330000002A
:10001000340000003500000036000000370000000A :10001000340000003500000036000000370000000A

View File

@@ -9,7 +9,16 @@ _start:
li a0, 4 li a0, 4
.word 0x0005006b # tmc a0 .word 0x0005006b # tmc a0
csrr a1, 0x20 # read thread IDs csrr a1, 0x20 # read thread IDs
csrr a2, 0x21 # read warp IDs # csrr a2, 0x21 # read warp IDs
slti a0, a1, 2
.word 0x0005206b # split a0
beq a0, zero, ELSE
li a2, 5
j DONE
ELSE:
li a2, 7
DONE:
.word 0x0000306b #join
ecall ecall
# li a0, 8 # Num Warps # li a0, 8 # Num Warps
# csrw 0x20, a0 # Setting the number of available warps # csrw 0x20, a0 # Setting the number of available warps

View File

@@ -8,8 +8,9 @@ EXE=--exe ./simulate/test_bench.cpp
COMP=--compiler gcc COMP=--compiler gcc
WNO=-Wno-fatal -Wno-UNOPTFLAT -Wno-UNDRIVEN -Wno-UNSIGNED -Wno-lint --Wno-PINMISSING -Wno-STMTDLY WNO=-Wno-UNOPTFLAT -Wno-UNDRIVEN --Wno-PINMISSING -Wno-STMTDLY -Wno-WIDTH
LIGHTW=-Wno-UNOPTFLAT --Wno-PINMISSING -Wno-WIDTH -Wno-STMTDLY
# LIB=-LDFLAGS '-L/usr/local/systemc/' # LIB=-LDFLAGS '-L/usr/local/systemc/'
LIB= LIB=
@@ -23,7 +24,7 @@ MAKECPP=(cd obj_dir && make -j -f VVortex.mk)
# -LDFLAGS '-lsystemc' # -LDFLAGS '-lsystemc'
VERILATOR: VERILATOR:
echo "#define VCD_OFF" > simulate/tb_debug.h echo "#define VCD_OFF" > simulate/tb_debug.h
verilator $(COMP) -cc $(FILE) $(INCLUDE) $(EXE) $(LIB) $(CF) verilator $(COMP) -cc $(FILE) $(INCLUDE) $(EXE) $(LIB) $(CF) $(LIGHTW)
VERILATORnoWarnings: VERILATORnoWarnings:
echo "#define VCD_OFF" > simulate/tb_debug.h echo "#define VCD_OFF" > simulate/tb_debug.h

View File

@@ -186,23 +186,23 @@ module VX_decode(
case(curr_opcode) case(curr_opcode)
`JAL_INST: `JAL_INST:
begin begin
temp_jal = 1'b1 && in_valid[0]; temp_jal = 1'b1 && (|in_valid);
temp_jal_offset = jal_1_offset; temp_jal_offset = jal_1_offset;
end end
`JALR_INST: `JALR_INST:
begin begin
temp_jal = 1'b1 && in_valid[0]; temp_jal = 1'b1 && (|in_valid);
temp_jal_offset = jal_2_offset; temp_jal_offset = jal_2_offset;
end end
`SYS_INST: `SYS_INST:
begin begin
// $display("SYS EBREAK %h", (jal_sys_jal && in_valid[0]) ); // $display("SYS EBREAK %h", (jal_sys_jal && (|in_valid)) );
temp_jal = jal_sys_jal && in_valid[0]; temp_jal = jal_sys_jal && (|in_valid);
temp_jal_offset = jal_sys_off; temp_jal_offset = jal_sys_off;
end end
default: default:
begin begin
temp_jal = 1'b0 && in_valid[0]; temp_jal = 1'b0 && (|in_valid);
temp_jal_offset = 32'hdeadbeef; temp_jal_offset = 32'hdeadbeef;
end end
endcase endcase
@@ -216,7 +216,7 @@ module VX_decode(
// assign is_ebreak = is_e_inst; // assign is_ebreak = is_e_inst;
wire ebreak = (curr_opcode == `SYS_INST) && (jal_sys_jal && in_valid[0]); wire ebreak = (curr_opcode == `SYS_INST) && (jal_sys_jal && (|in_valid));
assign VX_frE_to_bckE_req.ebreak = ebreak; assign VX_frE_to_bckE_req.ebreak = ebreak;
assign out_ebreak = ebreak; assign out_ebreak = ebreak;
@@ -257,7 +257,7 @@ module VX_decode(
`B_INST: `B_INST:
begin begin
// $display("BRANCH IN DECODE"); // $display("BRANCH IN DECODE");
temp_branch_stall = 1'b1 && in_valid[0]; temp_branch_stall = 1'b1 && (|in_valid);
case(func3) case(func3)
3'h0: temp_branch_type = `BEQ; 3'h0: temp_branch_type = `BEQ;
3'h1: temp_branch_type = `BNE; 3'h1: temp_branch_type = `BNE;
@@ -272,17 +272,17 @@ module VX_decode(
`JAL_INST: `JAL_INST:
begin begin
temp_branch_type = `NO_BRANCH; temp_branch_type = `NO_BRANCH;
temp_branch_stall = 1'b1 && in_valid[0]; temp_branch_stall = 1'b1 && (|in_valid);
end end
`JALR_INST: `JALR_INST:
begin begin
temp_branch_type = `NO_BRANCH; temp_branch_type = `NO_BRANCH;
temp_branch_stall = 1'b1 && in_valid[0]; temp_branch_stall = 1'b1 && (|in_valid);
end end
default: default:
begin begin
temp_branch_type = `NO_BRANCH; temp_branch_type = `NO_BRANCH;
temp_branch_stall = 1'b0 && in_valid[0]; temp_branch_stall = 1'b0 && (|in_valid);
end end
endcase endcase
end end

View File

@@ -58,16 +58,26 @@ module VX_execute_unit (
endgenerate endgenerate
wire [`NW_M1:0] branch_use_index;
wire branch_found_valid;
VX_priority_encoder choose_alu_result(
.valids(VX_exec_unit_req.valid),
.index (branch_use_index),
.found (branch_found_valid)
);
wire[31:0] branch_use_alu_result = alu_result[branch_use_index];
reg temp_branch_dir; reg temp_branch_dir;
always @(*) always @(*)
begin begin
case(VX_exec_unit_req.branch_type) case(VX_exec_unit_req.branch_type)
`BEQ: temp_branch_dir = (alu_result[0] == 0) ? `TAKEN : `NOT_TAKEN; `BEQ: temp_branch_dir = (branch_use_alu_result == 0) ? `TAKEN : `NOT_TAKEN;
`BNE: temp_branch_dir = (alu_result[0] == 0) ? `NOT_TAKEN : `TAKEN; `BNE: temp_branch_dir = (branch_use_alu_result == 0) ? `NOT_TAKEN : `TAKEN;
`BLT: temp_branch_dir = (alu_result[0][31] == 0) ? `NOT_TAKEN : `TAKEN; `BLT: temp_branch_dir = (branch_use_alu_result[31] == 0) ? `NOT_TAKEN : `TAKEN;
`BGT: temp_branch_dir = (alu_result[0][31] == 0) ? `TAKEN : `NOT_TAKEN; `BGT: temp_branch_dir = (branch_use_alu_result[31] == 0) ? `TAKEN : `NOT_TAKEN;
`BLTU: temp_branch_dir = (alu_result[0][31] == 0) ? `NOT_TAKEN : `TAKEN; `BLTU: temp_branch_dir = (branch_use_alu_result[31] == 0) ? `NOT_TAKEN : `TAKEN;
`BGTU: temp_branch_dir = (alu_result[0][31] == 0) ? `TAKEN : `NOT_TAKEN; `BGTU: temp_branch_dir = (branch_use_alu_result[31] == 0) ? `TAKEN : `NOT_TAKEN;
`NO_BRANCH: temp_branch_dir = `NOT_TAKEN; `NO_BRANCH: temp_branch_dir = `NOT_TAKEN;
default: temp_branch_dir = `NOT_TAKEN; default: temp_branch_dir = `NOT_TAKEN;
endcase // in_branch_type endcase // in_branch_type

View File

@@ -22,13 +22,12 @@ module VX_generic_stack
if (reset) begin if (reset) begin
ptr <= 0; ptr <= 0;
for (i = 0; i < (1 << DEPTH); i=i+1) stack[i] <= 0; for (i = 0; i < (1 << DEPTH); i=i+1) stack[i] <= 0;
end else if (push)
ptr <= ptr + 2;
else if (pop) begin
ptr <= ptr - 1;
end else if (push) begin end else if (push) begin
stack[ptr] <= q1; stack[ptr] <= q1;
stack[ptr+1] <= q2; stack[ptr+1] <= q2;
ptr <= ptr + 2;
end else if (pop) begin
ptr <= ptr - 1;
end end
end end

View File

@@ -7,6 +7,9 @@ module VX_gpgpu_inst (
); );
wire[`NT_M1:0] curr_valids = VX_gpu_inst_req.valid;
wire is_split = (VX_gpu_inst_req.is_split);
wire[`NT_M1:0] tmc_new_mask; wire[`NT_M1:0] tmc_new_mask;
genvar curr_t; genvar curr_t;
for (curr_t = 0; curr_t < `NT; curr_t=curr_t+1) for (curr_t = 0; curr_t < `NT; curr_t=curr_t+1)
@@ -14,7 +17,7 @@ module VX_gpgpu_inst (
assign tmc_new_mask[curr_t] = curr_t < VX_gpu_inst_req.a_reg_data[0]; assign tmc_new_mask[curr_t] = curr_t < VX_gpu_inst_req.a_reg_data[0];
end end
wire valid_inst = (|VX_gpu_inst_req.valid); wire valid_inst = (|curr_valids);
assign VX_warp_ctl.warp_num = VX_gpu_inst_req.warp_num; assign VX_warp_ctl.warp_num = VX_gpu_inst_req.warp_num;
assign VX_warp_ctl.change_mask = (VX_gpu_inst_req.is_tmc || VX_gpu_inst_req.is_split) && valid_inst; assign VX_warp_ctl.change_mask = (VX_gpu_inst_req.is_tmc || VX_gpu_inst_req.is_split) && valid_inst;
@@ -34,20 +37,19 @@ module VX_gpgpu_inst (
for (curr_s_t = 0; curr_s_t < `NT; curr_s_t=curr_s_t+1) begin for (curr_s_t = 0; curr_s_t < `NT; curr_s_t=curr_s_t+1) begin
wire curr_bool = (VX_gpu_inst_req.a_reg_data[curr_s_t] == 32'b1); wire curr_bool = (VX_gpu_inst_req.a_reg_data[curr_s_t] == 32'b1);
assign split_new_use_mask[curr_s_t] = VX_gpu_inst_req.valid[curr_s_t] & (curr_bool); assign split_new_use_mask[curr_s_t] = curr_valids[curr_s_t] & (curr_bool);
assign split_new_later_mask[curr_s_t] = VX_gpu_inst_req.valid[curr_s_t] & (!curr_bool); assign split_new_later_mask[curr_s_t] = curr_valids[curr_s_t] & (!curr_bool);
end end
reg[$clog2(`NT)-1:0] num_valids;
integer z; wire[`NW_M1:0] num_valids;
always @(*) begin VX_one_counter one_counter(
num_valids = 0; .valids (curr_valids),
for (z = 0; z < `NT; z=z+1) begin .ones_found(num_valids)
if (VX_gpu_inst_req.valid[z]) num_valids = num_valids + 1; );
end
end
assign VX_warp_ctl.is_split = (VX_gpu_inst_req.is_split) && (num_valids > 1); assign VX_warp_ctl.is_split = is_split && (num_valids > 1);
assign VX_warp_ctl.split_new_mask = split_new_use_mask; assign VX_warp_ctl.split_new_mask = split_new_use_mask;
assign VX_warp_ctl.split_later_mask = split_new_later_mask; assign VX_warp_ctl.split_later_mask = split_new_later_mask;
assign VX_warp_ctl.split_save_pc = VX_gpu_inst_req.pc_next; assign VX_warp_ctl.split_save_pc = VX_gpu_inst_req.pc_next;

View File

@@ -15,112 +15,112 @@ module VX_gpr (
assign write_enable = valid_write_request && ((VX_writeback_inter.wb != 0) && (VX_writeback_inter.rd != 5'h0)); assign write_enable = valid_write_request && ((VX_writeback_inter.wb != 0) && (VX_writeback_inter.rd != 5'h0));
// byte_enabled_simple_dual_port_ram first_ram( byte_enabled_simple_dual_port_ram first_ram(
// .we (write_enable), .we (write_enable),
// .clk (clk), .clk (clk),
// .waddr (VX_writeback_inter.rd), .waddr (VX_writeback_inter.rd),
// .raddr1(VX_gpr_read.rs1), .raddr1(VX_gpr_read.rs1),
// .raddr2(VX_gpr_read.rs2), .raddr2(VX_gpr_read.rs2),
// .be (VX_writeback_inter.wb_valid), .be (VX_writeback_inter.wb_valid),
// .wdata (VX_writeback_inter.write_data), .wdata (VX_writeback_inter.write_data),
// .q1 (out_a_reg_data), .q1 (out_a_reg_data),
// .q2 (out_b_reg_data) .q2 (out_b_reg_data)
// ); );
wire[`NT_M1:0][31:0] write_bit_mask; // wire[`NT_M1:0][31:0] write_bit_mask;
genvar curr_t; // genvar curr_t;
for (curr_t = 0; curr_t < `NT; curr_t=curr_t+1) begin // for (curr_t = 0; curr_t < `NT; curr_t=curr_t+1) begin
wire local_write = write_enable & VX_writeback_inter.wb_valid[curr_t]; // wire local_write = write_enable & VX_writeback_inter.wb_valid[curr_t];
assign write_bit_mask[curr_t] = {32{~local_write}}; // assign write_bit_mask[curr_t] = {32{~local_write}};
end // end
wire going_to_write = write_enable & (|VX_writeback_inter.wb_valid); // wire going_to_write = write_enable & (|VX_writeback_inter.wb_valid);
wire cenb = !going_to_write; // wire cenb = !going_to_write;
wire cena_1 = (VX_gpr_read.rs1 == 0); // wire cena_1 = (VX_gpr_read.rs1 == 0);
wire cena_2 = (VX_gpr_read.rs2 == 0); // wire cena_2 = (VX_gpr_read.rs2 == 0);
// wire[127:0] write_bit_mask = {{32{~(VX_writeback_inter.wb_valid[3])}}, {32{~(VX_writeback_inter.wb_valid[2])}}, {32{~(VX_writeback_inter.wb_valid[1])}}, {32{~(VX_writeback_inter.wb_valid[0])}}}; // // wire[127:0] write_bit_mask = {{32{~(VX_writeback_inter.wb_valid[3])}}, {32{~(VX_writeback_inter.wb_valid[2])}}, {32{~(VX_writeback_inter.wb_valid[1])}}, {32{~(VX_writeback_inter.wb_valid[0])}}};
/* verilator lint_off PINCONNECTEMPTY */ // /* verilator lint_off PINCONNECTEMPTY */
rf2_32x128_wm1 first_ram ( // rf2_32x128_wm1 first_ram (
.CENYA(), // .CENYA(),
.AYA(), // .AYA(),
.CENYB(), // .CENYB(),
.WENYB(), // .WENYB(),
.AYB(), // .AYB(),
.QA(out_a_reg_data), // .QA(out_a_reg_data),
.SOA(), // .SOA(),
.SOB(), // .SOB(),
.CLKA(clk), // .CLKA(clk),
.CENA(cena_1), // .CENA(cena_1),
.AA(VX_gpr_read.rs1), // .AA(VX_gpr_read.rs1),
.CLKB(clk), // .CLKB(clk),
.CENB(cenb), // .CENB(cenb),
.WENB(write_bit_mask), // .WENB(write_bit_mask),
.AB(VX_writeback_inter.rd), // .AB(VX_writeback_inter.rd),
.DB(VX_writeback_inter.write_data), // .DB(VX_writeback_inter.write_data),
.EMAA(3'b011), // .EMAA(3'b011),
.EMASA(1'b0), // .EMASA(1'b0),
.EMAB(3'b011), // .EMAB(3'b011),
.TENA(1'b1), // .TENA(1'b1),
.TCENA(1'b0), // .TCENA(1'b0),
.TAA(5'b0), // .TAA(5'b0),
.TENB(1'b1), // .TENB(1'b1),
.TCENB(1'b0), // .TCENB(1'b0),
.TWENB(128'b0), // .TWENB(128'b0),
.TAB(5'b0), // .TAB(5'b0),
.TDB(128'b0), // .TDB(128'b0),
.RET1N(1'b1), // .RET1N(1'b1),
.SIA(2'b0), // .SIA(2'b0),
.SEA(1'b0), // .SEA(1'b0),
.DFTRAMBYP(1'b0), // .DFTRAMBYP(1'b0),
.SIB(2'b0), // .SIB(2'b0),
.SEB(1'b0), // .SEB(1'b0),
.COLLDISN(1'b1) // .COLLDISN(1'b1)
); // );
/* verilator lint_on PINCONNECTEMPTY */ // /* verilator lint_on PINCONNECTEMPTY */
/* verilator lint_off PINCONNECTEMPTY */ // /* verilator lint_off PINCONNECTEMPTY */
rf2_32x128_wm1 second_ram ( // rf2_32x128_wm1 second_ram (
.CENYA(), // .CENYA(),
.AYA(), // .AYA(),
.CENYB(), // .CENYB(),
.WENYB(), // .WENYB(),
.AYB(), // .AYB(),
.QA(out_b_reg_data), // .QA(out_b_reg_data),
.SOA(), // .SOA(),
.SOB(), // .SOB(),
.CLKA(clk), // .CLKA(clk),
.CENA(cena_2), // .CENA(cena_2),
.AA(VX_gpr_read.rs2), // .AA(VX_gpr_read.rs2),
.CLKB(clk), // .CLKB(clk),
.CENB(cenb), // .CENB(cenb),
.WENB(write_bit_mask), // .WENB(write_bit_mask),
.AB(VX_writeback_inter.rd), // .AB(VX_writeback_inter.rd),
.DB(VX_writeback_inter.write_data), // .DB(VX_writeback_inter.write_data),
.EMAA(3'b011), // .EMAA(3'b011),
.EMASA(1'b0), // .EMASA(1'b0),
.EMAB(3'b011), // .EMAB(3'b011),
.TENA(1'b1), // .TENA(1'b1),
.TCENA(1'b0), // .TCENA(1'b0),
.TAA(5'b0), // .TAA(5'b0),
.TENB(1'b1), // .TENB(1'b1),
.TCENB(1'b0), // .TCENB(1'b0),
.TWENB(128'b0), // .TWENB(128'b0),
.TAB(5'b0), // .TAB(5'b0),
.TDB(128'b0), // .TDB(128'b0),
.RET1N(1'b1), // .RET1N(1'b1),
.SIA(2'b0), // .SIA(2'b0),
.SEA(1'b0), // .SEA(1'b0),
.DFTRAMBYP(1'b0), // .DFTRAMBYP(1'b0),
.SIB(2'b0), // .SIB(2'b0),
.SEB(1'b0), // .SEB(1'b0),
.COLLDISN(1'b1) // .COLLDISN(1'b1)
); // );
/* verilator lint_on PINCONNECTEMPTY */ // /* verilator lint_on PINCONNECTEMPTY */
endmodule endmodule

View File

@@ -42,7 +42,7 @@ module VX_scheduler (
always @(posedge clk or posedge reset) begin always @(posedge clk or posedge reset) begin
if (reset) begin if (reset) begin
for (i = 0; i < 32; i = i + 1) rename_table[i] = 0; for (i = 0; i < 32; i = i + 1) rename_table[i] <= 0;
end else begin end else begin
if (valid_wb ) rename_table[VX_writeback_inter.rd] <= 0; if (valid_wb ) rename_table[VX_writeback_inter.rd] <= 0;
if (!schedule_delay && wb_inc) rename_table[VX_bckE_req.rd] <= 1; if (!schedule_delay && wb_inc) rename_table[VX_bckE_req.rd] <= 1;

View File

@@ -50,7 +50,7 @@ module VX_warp_scheduler (
); );
wire[(1+32+`NT_M1):0] d; wire[(1+32+`NT_M1):0] d[`NW-1:0];
wire join_fall; wire join_fall;
wire[31:0] join_pc; wire[31:0] join_pc;
@@ -182,11 +182,11 @@ module VX_warp_scheduler (
end end
end end
wire[(1+32+`NT_M1):0] q1 = {1'b1, warp_pcs[split_warp_num], thread_masks[split_warp_num]}; wire[(1+32+`NT_M1):0] q1 = {1'b1, 32'b0 , thread_masks[split_warp_num]};
wire[(1+32+`NT_M1):0] q2 = {1'b0, split_save_pc , split_later_mask}; wire[(1+32+`NT_M1):0] q2 = {1'b0, split_save_pc , split_later_mask};
assign {join_fall, join_pc, join_tm} = d; assign {join_fall, join_pc, join_tm} = d[join_warp_num];
@@ -202,7 +202,7 @@ module VX_warp_scheduler (
.reset(reset), .reset(reset),
.push (push), .push (push),
.pop (pop), .pop (pop),
.d (d), .d (d[curr_warp]),
.q1 (q1), .q1 (q1),
.q2 (q2) .q2 (q2)
); );

View File

@@ -1,7 +1,7 @@
# Dynamic Instructions: 12 # Dynamic Instructions: 36
# of total cycles: 25 # of total cycles: 50
# of forwarding stalls: 0 # of forwarding stalls: 0
# of branch stalls: 0 # of branch stalls: 0
# CPI: 2.08333 # CPI: 1.38889
# time to simulate: 0 milliseconds # time to simulate: 6.95313e-310 milliseconds
# GRADE: Failed on test: 4294967295 # GRADE: Failed on test: 4294967295

View File

@@ -1 +1 @@
#define VCD_OFF #define VCD_OUTPUT

View File

@@ -373,8 +373,14 @@ bool Vortex::simulate(std::string file_to_simulate)
bool cont = false; bool cont = false;
// for (int i = 0; i < 500; i++) // for (int i = 0; i < 500; i++)
vortex->clk = 0; vortex->reset = 1;
vortex->clk = 0;
vortex->eval(); vortex->eval();
vortex->reset = 1;
vortex->clk = 1;
vortex->eval();
vortex->reset = 0;
vortex->clk = 0;
// unsigned cycles; // unsigned cycles;
counter = 0; counter = 0;