1. C++ / Говнокод #28066

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    #define CONSTRUCT_JUMP(name_, opcode_) else if(mnemonic.name == #name_) \
    	subcompileMnemonic(mnemonic, {\
    	{constructDescription(CONSTANT), opcode_},\
    	{constructDescription(LABEL), opcode_}})
    
    	CONSTRUCT_JUMP(JMP, JMP);
    
    	CONSTRUCT_JUMP(JE, JZ);
    	CONSTRUCT_JUMP(JZ, JZ);
    
    	CONSTRUCT_JUMP(JNZ, JNZ);
    	CONSTRUCT_JUMP(JNE, JNZ);
    
    	CONSTRUCT_JUMP(JG, JG);
    	CONSTRUCT_JUMP(JNLE, JG);
    	CONSTRUCT_JUMP(JNLZ, JG);
    
    	CONSTRUCT_JUMP(JLE, JNG);
    	CONSTRUCT_JUMP(JLZ, JNG);
    	CONSTRUCT_JUMP(JNG, JNG);
    
    	CONSTRUCT_JUMP(JGE, JGZ);
    	CONSTRUCT_JUMP(JGZ, JGZ);
    	CONSTRUCT_JUMP(JNL, JGZ);
    
    	CONSTRUCT_JUMP(JNGZ, JL);
    	CONSTRUCT_JUMP(JNGE, JL);
    	CONSTRUCT_JUMP(JL  , JL);
    
    	CONSTRUCT_JUMP(JB, JB);
    	CONSTRUCT_JUMP(JNAE, JB);
    	CONSTRUCT_JUMP(JNAZ, JB);
    	CONSTRUCT_JUMP(JC, JB);
    
    	CONSTRUCT_JUMP(JNB, JNB);
    	CONSTRUCT_JUMP(JAE, JNB);
    	CONSTRUCT_JUMP(JAZ, JNB);
    	CONSTRUCT_JUMP(JNC, JNB);
    
    	CONSTRUCT_JUMP(JBE, JBZ);
    	CONSTRUCT_JUMP(JBZ, JBZ);
    	CONSTRUCT_JUMP(JNA, JBZ);
    
    	CONSTRUCT_JUMP(JA, JA);
    	CONSTRUCT_JUMP(JNBE, JA);
    	CONSTRUCT_JUMP(JNBZ, JA);
    
    	CONSTRUCT_JUMP(CALL, CALL);
    #undef CONSTRUCT_JUMP

    Запостил: kcalbCube, 01 Марта 2022

    Комментарии (22) RSS

    • подскажите как лучше переписать?
      Ответить
      • На "PHP", вестимо
        Ответить
        • анперфомансно к сожалению. у меня и так каждая строка в среднем 0.98 мс компилируется
          Ответить
    • А почему х86 за основу своей архитектуры выбрал, а не какой-нибудь из risc'ов?
      Ответить
      • прошлая вмка как раз risc была, особенно никаких нет отличий, кроме адресации через ручные add, несимметричных регистров в инструкциях, очень маленького количества байт на инструкцию и другой никому не нужной хуйни. алсо циски в виртуалках всегда выигрывают.
        Ответить
        • в идеале бы что-то сродни спектруму получить, только погибше. и на лиспе(компилятор уже в разработке) игры писать
          Ответить
        • > всегда выигрывают

          Почему? Интерпретировать легче?
          Ответить
          • Видимо, одно и то же делается меньшим кол-вом инструкций.
            Ответить
            • Хотя хороший годный RISC типа ARM гораздо элегантнее, на мой взгляд.
              Ответить
              • > ARM
                > элегантнее

                Ты просто его mrc/mcr не юзал видимо... Да и thumb/thumb2 добавляют говна в огонь: неортогональные, переменной длины, хуй угадаешь где какое ограничение на оффсеты.
                Ответить
              • x86 тоже risc, нужно просто дать возможность на микрококоде писать.
                Ответить
          • да, меньше затрат на чтение
            Ответить
        • https://govnokod.ru/27418
          я тут ещё писал асм в олдовом стиле, большими буквами.
          Ответить
    • Might as well jump. Jump!
      Might as well jump
      Go ahead, jump. Jump!
      Go ahead and jump
      Ответить

    Добавить комментарий