Assembly Hall of Shame

(github.com)

93 points | by piotrgrabowski 2 hours ago ago

25 comments

  • layer8 39 minutes ago

    Nop should be #1, because it is infinitely slow for what it does. ;)

    • mito88 2 minutes ago

      Strategy: nop does nothing. It opens the leaderboard accordingly.

      Score: 1 cycles Time: 0 nanoseconds

    • jooops1 34 minutes ago

      It increments rip by one.

  • michalsustr 25 minutes ago

    Very cool! Also, huh interesting. I’ve used rdtsc to measure cycle diffs but had no idea its execution takes that long. Is that common across architectures?

  • TomatoCo an hour ago

    This author also has other things like: A compiler that emits only `mov` instructions and another compiler that deliberately messes with the control flow so that, if disassembled, common debuggers will draw symbols like skulls or threats. https://github.com/xoreaxeaxeax/repsych

    • inigyou 10 minutes ago

      He also bruteforced the entire opcode space to find undocumented instructions (sandsifter).

  • spoocecow an hour ago

    Oh wow, glad to see Chris Domas active online again!

  • codeshaunted an hour ago

    what im seeing from this chart is that we should be using the nop instruction for everything

    • bee_rider an hour ago

      Well the best code is no code. Nop could be second best though.

      • inigyou 10 minutes ago

        Instructions unclear. Set the NX bit to ensure no code, and got a general protection fault.

  • Retr0id 35 minutes ago

    Related, and linked in the readme: https://github.com/xoreaxeaxeax/smiiiiiiiiiiiiiiii (using the slow instructions to break SMI)

  • vardump 2 hours ago

    A great resource for any performance deoptimization.

  • metadat an hour ago

    It’s crazy how computers still seem to get perceivably slow every few years, given how many instructions can be executed in 1ms. Shameful, even..

    What’s that law called about programmers wasting all the compute on abstraction?

    • inigyou 10 minutes ago

      Andy and Bill's Law

    • summarybot 24 minutes ago

      The OS should do less not more

    • mwigdahl 25 minutes ago

      Wirth's Law I believe.

      • inigyou 9 minutes ago

        And remember to call him by name, not by value!

    • HappyPanacea an hour ago

      The new windows notepad is a disgrace

    • LoganDark an hour ago

      Huh? A millisecond is an eternity!

      • m463 41 minutes ago

        I remember reading once somewhere:

        If some app responds in 10ms or less, it is INTERACTIVE.

        makes you think.

        • Xirdus 2 minutes ago

          It is literally impossible to respond to input in 10ms on most platforms, for various reasons. The USB input lag of 12-30ms and the 60Hz refresh rate of most monitors being just the first two.

  • arn3n an hour ago

    There’s definitely strategies here; A lot of the floating point operations use subnormals, and a lot of the worst instructions are slowed down by really, really fucking with MMIO.

  • achierius an hour ago

    It'd be really interesting to see whether the winning (losing?) instructions/strategies would be different on other architectures. At least right now the top spot (`fxrstor64` on MMIO, starve PCIe) seems relatively architecture-independent, but maybe something about MMIO ordering rules on e.g. POWER would be different enough to change that -- or perhaps open up new avenues?

    I wonder what the actual limit on this `fxrstor64` is right now. If you can stall the PCIe bus for that long, then why not indefinitely? Certainly there's no forward progress guarantee here.