about summary refs log tree commit diff stats
BranchCommit messageAuthorAge
bongkeys: st-xterm compatAcid Bong3 years
masterbump version to 6.4Hiltjo Posthuma3 years
musldmenumon fixAcid Bong3 years
 
TagDownloadAuthorAge
6.4dwm-6.4.tar.gz  Hiltjo Posthuma3 years
6.3dwm-6.3.tar.gz  Hiltjo Posthuma4 years
6.2dwm-6.2.tar.gz  Anselm R Garbe7 years
6.1dwm-6.1.tar.gz  Hiltjo Posthuma10 years
6.0dwm-6.0.tar.gz  anselm@garbe.us14 years
5.9dwm-5.9.tar.gz  garbeam@gmail.com14 years
5.8.2dwm-5.8.2.tar.gz  Anselm R Garbe15 years
5.8.1dwm-5.8.1.tar.gz  Anselm R Garbe15 years
5.8dwm-5.8.tar.gz  anselm@garbe.us15 years
5.7.2dwm-5.7.2.tar.gz  Anselm R Garbe16 years
5.7.1dwm-5.7.1.tar.gz  Anselm R Garbe16 years
5.7dwm-5.7.tar.gz  Anselm R Garbe16 years
5.6.1dwm-5.6.1.tar.gz  Anselm R Garbe16 years
5.6dwm-5.6.tar.gz  Anselm R Garbe16 years
5.5dwm-5.5.tar.gz  Anselm R Garbe16 years
5.4.1dwm-5.4.1.tar.gz  a@null17 years
5.4dwm-5.4.tar.gz  a@null17 years
5.3.1dwm-5.3.1.tar.gz  Anselm R Garbe17 years
5.3dwm-5.3.tar.gz  Anselm R Garbe17 years
5.2dwm-5.2.tar.gz  Anselm R Garbe17 years
5.1dwm-5.1.tar.gz  Anselm R Garbe17 years
5.0dwm-5.0.tar.gz  Anselm R Garbe17 years
4.9dwm-4.9.tar.gz  Anselm R Garbe17 years
4.8dwm-4.8.tar.gz  Anselm R Garbe17 years
4.7dwm-4.7.tar.gz  Anselm R. Garbe18 years
4.6dwm-4.6.tar.gz  arg@suckless.org18 years
4.5dwm-4.5.tar.gz  Anselm R. Garbe18 years
4.4.1dwm-4.4.1.tar.gz  Anselm R. Garbe18 years
4.4dwm-4.4.tar.gz  Anselm R. Garbe18 years
4.3dwm-4.3.tar.gz  arg@f00b4r18 years
4.2dwm-4.2.tar.gz  Anselm R. Garbe18 years
4.1dwm-4.1.tar.gz  Anselm R. Garbe18 years
4.0dwm-4.0.tar.gz  Anselm R. Garbe18 years
3.9dwm-3.9.tar.gz  Anselm R. Garbe18 years
3.8dwm-3.8.tar.gz  Anselm R. Garbe18 years
3.7dwm-3.7.tar.gz  Anselm R. Garbe18 years
3.6.1dwm-3.6.1.tar.gz  Anselm R. Garbe18 years
3.6dwm-3.6.tar.gz  Anselm R. Garbe18 years
3.5dwm-3.5.tar.gz  Anselm R. Garbe19 years
3.4dwm-3.4.tar.gz  Anselm R. Garbe19 years
3.3dwm-3.3.tar.gz  Anselm R. Garbe19 years
3.2.2dwm-3.2.2.tar.gz  Anselm R. Garbe19 years
3.2.1dwm-3.2.1.tar.gz  Anselm R. Garbe19 years
3.2dwm-3.2.tar.gz  Anselm R. Garbe19 years
3.1dwm-3.1.tar.gz  Anselm R. Garbe19 years
3.0dwm-3.0.tar.gz  Anselm R. Garbe19 years
2.9dwm-2.9.tar.gz  Anselm R. Garbe19 years
2.8dwm-2.8.tar.gz  arg@mig2919 years
2.7dwm-2.7.tar.gz  arg@mig2919 years
2.6dwm-2.6.tar.gz  arg@mig2919 years
2.5.1dwm-2.5.1.tar.gz  arg@mig2919 years
2.5dwm-2.5.tar.gz  arg@mig2919 years
2.4dwm-2.4.tar.gz  arg@mig2919 years
2.3dwm-2.3.tar.gz  arg@mig2919 years
2.2dwm-2.2.tar.gz  arg@mig2919 years
2.1dwm-2.1.tar.gz  arg@mig2919 years
2.0dwm-2.0.tar.gz  arg@mig2919 years
1.9dwm-1.9.tar.gz  Anselm R. Garbe19 years
1.8dwm-1.8.tar.gz  Anselm R. Garbe19 years
1.7.1dwm-1.7.1.tar.gz  Anselm R. Garbe19 years
1.7dwm-1.7.tar.gz  arg@mmvi19 years
1.6dwm-1.6.tar.gz  arg@mmvi19 years
1.5dwm-1.5.tar.gz  Anselm R. Garbe19 years
1.4dwm-1.4.tar.gz  Anselm R. Garbe19 years
1.3dwm-1.3.tar.gz  Anselm R. Garbe19 years
1.2dwm-1.2.tar.gz  Anselm R. Garbe19 years
1.1dwm-1.1.tar.gz  Anselm R. Garbe19 years
1.0dwm-1.0.tar.gz  Anselm R. Garbe19 years
0.9dwm-0.9.tar.gz  Anselm R.Garbe19 years
0.8dwm-0.8.tar.gz  Anselm R.Garbe19 years
0.7dwm-0.7.tar.gz  arg@10ksloc.org19 years
0.6dwm-0.6.tar.gz  arg@10ksloc.org19 years
0.5dwm-0.5.tar.gz  arg@10ksloc.org19 years
0.4dwm-0.4.tar.gz  arg@10ksloc.org19 years
0.3dwm-0.3.tar.gz  arg@10ksloc.org19 years
0.2dwm-0.2.tar.gz  Anselm R. Garbe19 years
0.1dwm-0.1.tar.gz  Anselm R. Garbe19 years
ss="w"> << NUM(offset) << end(); EIP += offset; break; } //:: jump if equal/zero :(before "End Initialize Op Names") put_new(Name, "74", "jump disp8 bytes away if equal, if ZF is set (jcc/jz/je)"); :(code) void test_je_disp8_success() { ZF = true; run( "== code 0x1\n" // op ModR/M SIB displacement immediate " 74 05 \n" // skip 1 instruction " 05 00 00 00 01 \n" " 05 00 00 00 02 \n" ); CHECK_TRACE_CONTENTS( "run: 0x00000001 opcode: 74\n" "run: jump 5\n" "run: 0x00000008 opcode: 05\n" ); CHECK_TRACE_DOESNT_CONTAIN("run: 0x00000003 opcode: 05"); } :(before "End Single-Byte Opcodes") case 0x74: { // jump disp8 if ZF const int8_t offset = static_cast<int>(next()); if (ZF) { trace(Callstack_depth+1, "run") << "jump " << NUM(offset) << end(); EIP += offset; } break; } :(code) void test_je_disp8_fail() { ZF = false; run( "== code 0x1\n" // op ModR/M SIB displacement immediate " 74 05 \n" // skip 1 instruction " 05 00 00 00 01 \n" " 05 00 00 00 02 \n" ); CHECK_TRACE_CONTENTS( "run: 0x00000001 opcode: 74\n" "run: 0x00000003 opcode: 05\n" "run: 0x00000008 opcode: 05\n" ); CHECK_TRACE_DOESNT_CONTAIN("run: jump 5"); } //:: jump if not equal/not zero :(before "End Initialize Op Names") put_new(Name, "75", "jump disp8 bytes away if not equal, if ZF is not set (jcc/jnz/jne)"); :(code) void test_jne_disp8_success() { ZF = false; run( "== code 0x1\n" // op ModR/M SIB displacement immediate " 75 05 \n" // skip 1 instruction " 05 00 00 00 01 \n" " 05 00 00 00 02 \n" ); CHECK_TRACE_CONTENTS( "run: 0x00000001 opcode: 75\n" "run: jump 5\n" "run: 0x00000008 opcode: 05\n" ); CHECK_TRACE_DOESNT_CONTAIN("run: 0x00000003 opcode: 05"); } :(before "End Single-Byte Opcodes") case 0x75: { // jump disp8 if !ZF const int8_t offset = static_cast<int>(next()); if (!ZF) { trace(Callstack_depth+1, "run") << "jump " << NUM(offset) << end(); EIP += offset; } break; } :(code) void test_jne_disp8_fail() { ZF = true; run( "== code 0x1\n" // op ModR/M SIB displacement immediate " 75 05 \n" // skip 1 instruction " 05 00 00 00 01 \n" " 05 00 00 00 02 \n" ); CHECK_TRACE_CONTENTS( "run: 0x00000001 opcode: 75\n" "run: 0x00000003 opcode: 05\n" "run: 0x00000008 opcode: 05\n" ); CHECK_TRACE_DOESNT_CONTAIN("run: jump 5"); } //:: jump if greater :(before "End Initialize Op Names") put_new(Name, "7f", "jump disp8 bytes away if greater, if ZF is unset and SF == OF (jcc/jg/jnle)"); put_new(Name, "77", "jump disp8 bytes away if greater (addr, float), if ZF is unset and CF is unset (jcc/ja/jnbe)"); :(code) void test_jg_disp8_success() { ZF = false; SF = false; OF = false; run( "== code 0x1\n" // op ModR/M SIB displacement immediate " 7f 05 \n" // skip 1 instruction " 05 00 00 00 01 \n" " 05 00 00 00 02 \n" ); CHECK_TRACE_CONTENTS( "run: 0x00000001 opcode: 7f\n" "run: jump 5\n" "run: 0x00000008 opcode: 05\n" ); CHECK_TRACE_DOESNT_CONTAIN("run: 0x00000003 opcode: 05"); } :(before "End Single-Byte Opcodes") case 0x7f: { // jump disp8 if SF == OF and !ZF const int8_t offset = static_cast<int>(next()); if (SF == OF && !ZF) { trace(Callstack_depth+1, "run") << "jump " << NUM(offset) << end(); EIP += offset; } break; } case 0x77: { // jump disp8 if !CF and !ZF const int8_t offset = static_cast<int>(next()); if (!CF && !ZF) { trace(Callstack_depth+1, "run") << "jump " << NUM(offset) << end(); EIP += offset; } break; } :(code) void test_jg_disp8_fail() { ZF = false; SF = true; OF = false; run( "== code 0x1\n" // op ModR/M SIB displacement immediate " 7f 05 \n" // skip 1 instruction " 05 00 00 00 01 \n" " 05 00 00 00 02 \n" ); CHECK_TRACE_CONTENTS( "run: 0x00000001 opcode: 7f\n" "run: 0x00000003 opcode: 05\n" "run: 0x00000008 opcode: 05\n" ); CHECK_TRACE_DOESNT_CONTAIN("run: jump 5"); } //:: jump if greater or equal :(before "End Initialize Op Names") put_new(Name, "7d", "jump disp8 bytes away if greater or equal, if SF == OF (jcc/jge/jnl)"); put_new(Name, "73", "jump disp8 bytes away if greater or equal (addr, float), if CF is unset (jcc/jae/jnb)"); :(code) void test_jge_disp8_success() { SF = false; OF = false; run( "== code 0x1\n" // op ModR/M SIB displacement immediate " 7d 05 \n" // skip 1 instruction " 05 00 00 00 01 \n" " 05 00 00 00 02 \n" ); CHECK_TRACE_CONTENTS( "run: 0x00000001 opcode: 7d\n" "run: jump 5\n" "run: 0x00000008 opcode: 05\n" ); CHECK_TRACE_DOESNT_CONTAIN("run: 0x00000003 opcode: 05"); } :(before "End Single-Byte Opcodes") case 0x7d: { // jump disp8 if SF == OF const int8_t offset = static_cast<int>(next()); if (SF == OF) { trace(Callstack_depth+1, "run") << "jump " << NUM(offset) << end(); EIP += offset; } break; } case 0x73: { // jump disp8 if !CF const int8_t offset = static_cast<int>(next()); if (!CF) { trace(Callstack_depth+1, "run") << "jump " << NUM(offset) << end(); EIP += offset; } break; } :(code) void test_jge_disp8_fail() { SF = true; OF = false; run( "== code 0x1\n" // op ModR/M SIB displacement immediate " 7d 05 \n" // skip 1 instruction " 05 00 00 00 01 \n" " 05 00 00 00 02 \n" ); CHECK_TRACE_CONTENTS( "run: 0x00000001 opcode: 7d\n" "run: 0x00000003 opcode: 05\n" "run: 0x00000008 opcode: 05\n" ); CHECK_TRACE_DOESNT_CONTAIN("run: jump 5"); } //:: jump if lesser :(before "End Initialize Op Names") put_new(Name, "7c", "jump disp8 bytes away if lesser, if SF != OF (jcc/jl/jnge)"); put_new(Name, "72", "jump disp8 bytes away if lesser (addr, float), if CF is set (jcc/jb/jnae)"); :(code) void test_jl_disp8_success() { ZF = false; SF = true; OF = false; run( "== code 0x1\n" // op ModR/M SIB displacement immediate " 7c 05 \n" // skip 1 instruction " 05 00 00 00 01 \n" " 05 00 00 00 02 \n" ); CHECK_TRACE_CONTENTS( "run: 0x00000001 opcode: 7c\n" "run: jump 5\n" "run: 0x00000008 opcode: 05\n" ); CHECK_TRACE_DOESNT_CONTAIN("run: 0x00000003 opcode: 05"); } :(before "End Single-Byte Opcodes") case 0x7c: { // jump disp8 if SF != OF const int8_t offset = static_cast<int>(next()); if (SF != OF) { trace(Callstack_depth+1, "run") << "jump " << NUM(offset) << end(); EIP += offset; } break; } case 0x72: { // jump disp8 if CF const int8_t offset = static_cast<int>(next()); if (CF) { trace(Callstack_depth+1, "run") << "jump " << NUM(offset) << end(); EIP += offset; } break; } :(code) void test_jl_disp8_fail() { ZF = false; SF = false; OF = false; run( "== code 0x1\n" // op ModR/M SIB displacement immediate " 7c 05 \n" // skip 1 instruction " 05 00 00 00 01 \n" " 05 00 00 00 02 \n" ); CHECK_TRACE_CONTENTS( "run: 0x00000001 opcode: 7c\n" "run: 0x00000003 opcode: 05\n" "run: 0x00000008 opcode: 05\n" ); CHECK_TRACE_DOESNT_CONTAIN("run: jump 5"); } //:: jump if lesser or equal :(before "End Initialize Op Names") put_new(Name, "7e", "jump disp8 bytes away if lesser or equal, if ZF is set or SF != OF (jcc/jle/jng)"); put_new(Name, "76", "jump disp8 bytes away if lesser or equal (addr, float), if ZF is set or CF is set (jcc/jbe/jna)"); :(code) void test_jle_disp8_equal() { ZF = true; SF = false; OF = false; run( "== code 0x1\n" // op ModR/M SIB displacement immediate " 7e 05 \n" // skip 1 instruction " 05 00 00 00 01 \n" " 05 00 00 00 02 \n" ); CHECK_TRACE_CONTENTS( "run: 0x00000001 opcode: 7e\n" "run: jump 5\n" "run: 0x00000008 opcode: 05\n" ); CHECK_TRACE_DOESNT_CONTAIN("run: 0x00000003 opcode: 05"); } :(code) void test_jle_disp8_lesser() { ZF = false; SF = true; OF = false; run( "== code 0x1\n" // op ModR/M SIB displacement immediate " 7e 05 \n" // skip 1 instruction " 05 00 00 00 01 \n" " 05 00 00 00 02 \n" ); CHECK_TRACE_CONTENTS( "run: 0x00000001 opcode: 7e\n" "run: jump 5\n" "run: 0x00000008 opcode: 05\n" ); CHECK_TRACE_DOESNT_CONTAIN("run: 0x00000003 opcode: 05"); } :(before "End Single-Byte Opcodes") case 0x7e: { // jump disp8 if ZF or SF != OF const int8_t offset = static_cast<int>(next()); if (ZF || SF != OF) { trace(Callstack_depth+1, "run") << "jump " << NUM(offset) << end(); EIP += offset; } break; } case 0x76: { // jump disp8 if ZF or CF const int8_t offset = static_cast<int>(next()); if (ZF || CF) { trace(Callstack_depth+1, "run") << "jump " << NUM(offset) << end(); EIP += offset; } break; } :(code) void test_jle_disp8_greater() { ZF = false; SF = false; OF = false; run( "== code 0x1\n" // op ModR/M SIB displacement immediate " 7e 05 \n" // skip 1 instruction " 05 00 00 00 01 \n" " 05 00 00 00 02 \n" ); CHECK_TRACE_CONTENTS( "run: 0x00000001 opcode: 7e\n" "run: 0x00000003 opcode: 05\n" "run: 0x00000008 opcode: 05\n" ); CHECK_TRACE_DOESNT_CONTAIN("run: jump 5"); }