{"push_id":1249483136,"size":5,"distinct_size":5,"ref":"refs/heads/executor-single-dispatch","head":"50e92915955859b010e6168b5e193c4cf34d35df","before":"acbea7de6c8bc20a3e533cd734ddfff9861a0469","commits":[{"sha":"c348dac22df6628d3d8001c966ae3565604b2a6a","author":{"name":"Sami Vaarala","email":"4c8cd70dbf931fe479ec12e2c3f501ced182ac6e@iki.fi"},"message":"Rework executor to use a single level dispatch\n\nChange dispatch to use an 8-bit main opcode instead of a 6-bit one.\nThis removes the need for \"EXTRA\" opcodes and a secondary switch\nclause in the executor dispatch loop.\n\nThe new opcode layout uses four 8-bit fields: opcode, A, B, C.  The\nprevious reg/const concept which used 9-bit B and C fields, with the\ntop bit reserved to denote reg vs const, is now implemented by using\nfour consecutive opcode slots and moving the B and C reg/const flags\ninto the opcode.  For example:\n\n    ADD_RR   reg(A) <- reg(B) + reg(C)\n    ADD_CR   reg(A) <- const(B) + reg(C)\n    ADD_RC   reg(A) <- reg(B) + const(C)\n    ADD_CC   reg(A) <- const(B) + const(C)\n\nFrom a footprint standpoint this allows the executor to remain roughly\nthe same size: four dispatched opcodes (each a function pointer in a\ncompiled jump table) point to the same case clause handler, which does\nthe reg/const decision based on an instruction bit test as before.\n\nHowever, when performance is more important than footprint, each reg/const\ncase can be handled separately in the executor so that there's no longer\na reg/const check when the opcode executes.\n\nNote that not all opcodes require a reg/const qualifier, so that opcode\nspace is effectively increased even if reg/const opcodes consume multiple\nentries from the opcode table.\n\nOther minor changes:\n\n* Optimize behavior of several opcodes to e.g. avoid unnecessary support\n  for shuffling/indirection when wider register arguments are now\n  available.","distinct":true,"url":"https://api.github.com/repos/svaarala/duktape/commits/c348dac22df6628d3d8001c966ae3565604b2a6a"},{"sha":"84b551ceb483fca65d69cd6184f5e30cd54b7790","author":{"name":"Sami Vaarala","email":"4c8cd70dbf931fe479ec12e2c3f501ced182ac6e@iki.fi"},"message":"Debugger opcode metadata and decoding rework","distinct":true,"url":"https://api.github.com/repos/svaarala/duktape/commits/84b551ceb483fca65d69cd6184f5e30cd54b7790"},{"sha":"507914896f00d9126e4866291c4ee28d9c23e172","author":{"name":"Sami Vaarala","email":"4c8cd70dbf931fe479ec12e2c3f501ced182ac6e@iki.fi"},"message":"Config options for single level dispatch rework","distinct":true,"url":"https://api.github.com/repos/svaarala/duktape/commits/507914896f00d9126e4866291c4ee28d9c23e172"},{"sha":"a7ad570bf7a7a3e50eada0a62e25e9521a939036","author":{"name":"Sami Vaarala","email":"4c8cd70dbf931fe479ec12e2c3f501ced182ac6e@iki.fi"},"message":"Perf test fixes and additions","distinct":true,"url":"https://api.github.com/repos/svaarala/duktape/commits/a7ad570bf7a7a3e50eada0a62e25e9521a939036"},{"sha":"50e92915955859b010e6168b5e193c4cf34d35df","author":{"name":"Sami Vaarala","email":"4c8cd70dbf931fe479ec12e2c3f501ced182ac6e@iki.fi"},"message":"Testcase fixes","distinct":true,"url":"https://api.github.com/repos/svaarala/duktape/commits/50e92915955859b010e6168b5e193c4cf34d35df"}]}
{"actor":{"display_login":"svaarala"}}