diff options
Diffstat (limited to 'ttt.jai')
| -rw-r--r-- | ttt.jai | 120 |
1 files changed, 2 insertions, 118 deletions
@@ -474,6 +474,7 @@ update_total_times :: (db: *Database) { totals: []s64 = db.total_times; memset(totals.data, 0, NUM_WEEK_DAYS * size_of(s64)); for db.tasks { + // TODO Try to use local variables instead of total sub...something... the indexes thingy. times : []s64 = it.times; totals[0] = add_int64(totals[0], times[0]); totals[1] = add_int64(totals[1], times[1]); @@ -1163,121 +1164,6 @@ read_enter_confirmation :: inline (row: int, style: int, message: string) -> boo } main :: () { - - - add :: (value_a: s64, value_b: s64) -> s64, bool #dump { // TODO Comparing implementaitons using dump - result: s64 = ---; - flag: bool = ---; - #asm { - mov d: gpr === d, 9223372036854775807; - mov a: gpr === a, value_a; - mov b: gpr === b, value_b; - add a, b; - seto flag; // Signal overflow. - mov result, a; - mov a, value_a; - shr a, 63; - add a, d; - mov c: gpr, value_a; - xor c, b; - xor b, result; - not b; - or c, b; - test c, c; - cmovns result, a; - } - return result, flag; - } - - - // value_a: s64 = 2; - // value_b: s64 = S64_MAX-1; - value_a: s64 = -2; - value_b: s64 = S64_MIN+1; - print(">%\n", S64_MAX); - argx := get_command_line_arguments(); - if argx.count > 1 - value_a = parse_int(*argx[1]); - if argx.count > 2 - value_b = parse_int(*argx[2]); - - result: s64 = ---; - flags: s64;// = ---; - #asm LAHF_SAHF { // TODO Remove LAHF_SAHF it not required. - - // Code from https://locklessinc.com/articles/sat_arithmetic/ - - - // value_a === b; - // value_b === c; - // add value_a, value_b; - // mov result, value_a; - - // Version 1 - // mov b: gpr === b, value_a; - // mov c: gpr === c, value_b; - // add b, c; - // mov result, b; - // seto flags; - // cmovns b, c; - -// s64b sat_adds64b(s64b x, s64b y) -// { -// u64b ux = x; -// u64b uy = y; -// u64b res = ux + uy; -// -// ux = (ux >> 63) + LONG_MAX; -// -// /* Force compiler to use cmovns instruction */ -// if ((s64b) ((ux ^ uy) | ~(uy ^ res)) >= 0) -// { -// res = ux; -// } -// -// return res; -// } - // Version 2 - WORKS - mov d: gpr === d, 9223372036854775807; - mov a: gpr === a, value_a; - mov b: gpr === b, value_b; - add a, b; - seto flags; // Signal overflow. - mov result, a; - mov a, value_a; - shr a, 63; - add a, d; - mov c: gpr, value_a; - xor c, b; - xor b, result; - not b; - or c, b; - test c, c; - cmovns result, a; - -// s64b sat_subs64b(s64b x, s64b y) -// { -// u64b ux = x; -// u64b uy = y; -// u64b res = ux - uy; -// -// ux = (ux >> 63) + LONG_MAX; -// -// /* Force compiler to use cmovns instruction */ -// if ((s64b)((ux ^ uy) & (ux ^ res)) < 0) -// { -// res = ux; -// } -// -// return res; -// } - // TODO Use https://godbolt.org/ to help - - } - print("% + % = %\n", value_a, value_b, result); - print("flag: %\n", flags); - return; - // TODO Implement signal handling and see modules/Debug.jai for examples. @@ -1293,9 +1179,7 @@ main :: () { } home_path, success_path := get_absolute_path(home_dir); // Returns temporary memory. - - - + if success_path == false { print_error("Failed to find home directory '%'.", home_dir); exit(1); |
