Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Acid - final release

Name: FrozenVoid 2011-10-28 11:50

Optimized quasicrystal code: full window size render ~17 seconds for 30 frames
http://pastebin.com/fjLQnbkB

Name: FrozenVoid !!mJCwdV5J0Xy2A21 2011-11-05 13:05

>>255
Nope it should cost more clock cycles but it does something to my CPU and it makes it complete faster.
Maybe it ensures some pipeline integrity or forces some intermediates to be present in registers.
; Disassembly of file: abs.obj
; Sat Nov 05 19:49:12 2011
; Mode: 32 bits
; Syntax: MASM/ML
; Instruction set: Pentium

.586
.model flat

public _main
public _rdtsc                                           ; Note: Communal. Not supported by MASM

extern _rand: near
extern _printf: near
extern _rdtsc: near
extern __acrtused_con: byte

FLAT    GROUP


_TEXT   SEGMENT DWORD PUBLIC 'CODE'                     ; section number 1

_main   PROC NEAR
        push    ebp                                     ; 0000 _ 55
        mov     ebp, esp                                ; 0001 _ 8B. EC
        mov     edx, 9                                  ; 0003 _ BA, 00000009
?_001:  sub     esp, 4096                               ; 0008 _ 81. EC, 00001000
        test    dword ptr [esp], esp                    ; 000E _ 85. 24 24
        dec     edx                                     ; 0011 _ 4A
        jnz     ?_001                                   ; 0012 _ 75, F4
        sub     esp, 3160                               ; 0014 _ 81. EC, 00000C58
        push    ebx                                     ; 001A _ 53
        push    esi                                     ; 001B _ 56
        push    edi                                     ; 001C _ 57
        mov     dword ptr [ebp-9C50H], 0                ; 001D _ C7. 85, FFFF63B0, 00000000
?_002:  cmp     dword ptr [ebp-9C50H], 10000            ; 0027 _ 81. BD, FFFF63B0, 00002710
        jge     ?_003                                   ; 0031 _ 7D, 28
        call    _rand                                   ; 0033 _ E8, 00000000(rel)
        mov     ecx, 10000                              ; 0038 _ B9, 00002710
        cdq                                             ; 003D _ 99
        idiv    ecx                                     ; 003E _ F7. F9
        add     edx, -5000                              ; 0040 _ 81. C2, FFFFEC78
        mov     eax, dword ptr [ebp-9C50H]              ; 0046 _ 8B. 85, FFFF63B0
        mov     dword ptr [ebp+eax*4-9C40H], edx        ; 004C _ 89. 94 85, FFFF63C0
        inc     dword ptr [ebp-9C50H]                   ; 0053 _ FF. 85, FFFF63B0
        jmp     ?_002                                   ; 0059 _ EB, CC

?_003:  call    _rdtsc                                  ; 005B _ E8, 00000000(rel)
        mov     dword ptr [ebp-9C48H], eax              ; 0060 _ 89. 85, FFFF63B8
        mov     dword ptr [ebp-9C44H], edx              ; 0066 _ 89. 95, FFFF63BC
        mov     dword ptr [ebp-9C4CH], 0                ; 006C _ C7. 85, FFFF63B4, 00000000
?_004:  cmp     dword ptr [ebp-9C4CH], 10000            ; 0076 _ 81. BD, FFFF63B4, 00002710
        jge     ?_007                                   ; 0080 _ 7D, 1D
        mov     edx, dword ptr [ebp-9C4CH]              ; 0082 _ 8B. 95, FFFF63B4
        mov     ebx, dword ptr [ebp+edx*4-9C40H]        ; 0088 _ 8B. 9C 95, FFFF63C0
        test    ebx, ebx                                ; 008F _ 85. DB
        jle     ?_005                                   ; 0091 _ 7E, 02
        jmp     ?_006                                   ; 0093 _ EB, 02

?_005:  neg     ebx                                     ; 0095 _ F7. DB
?_006:  inc     dword ptr [ebp-9C4CH]                   ; 0097 _ FF. 85, FFFF63B4
        jmp     ?_004                                   ; 009D _ EB, D7

?_007:  call    _rdtsc                                  ; 009F _ E8, 00000000(rel)
        sub     eax, dword ptr [ebp-9C48H]              ; 00A4 _ 2B. 85, FFFF63B8
        sbb     edx, dword ptr [ebp-9C44H]              ; 00AA _ 1B. 95, FFFF63BC
        push    edx                                     ; 00B0 _ 52
        push    eax                                     ; 00B1 _ 50
        push    offset FLAT:?_010                       ; 00B2 _ 68, 00000000(segrel)
        call    _printf                                 ; 00B7 _ E8, 00000000(rel)
        call    _rdtsc                                  ; 00BC _ E8, 00000000(rel)
        mov     dword ptr [ebp-9C48H], eax              ; 00C1 _ 89. 85, FFFF63B8
        mov     dword ptr [ebp-9C44H], edx              ; 00C7 _ 89. 95, FFFF63BC
        add     esp, 12                                 ; 00CD _ 83. C4, 0C
        mov     dword ptr [ebp-9C4CH], 0                ; 00D0 _ C7. 85, FFFF63B4, 00000000
?_008:  cmp     dword ptr [ebp-9C4CH], 10000            ; 00DA _ 81. BD, FFFF63B4, 00002710
        jge     ?_009                                   ; 00E4 _ 7D, 3C
        mov     esi, dword ptr [ebp-9C4CH]              ; 00E6 _ 8B. B5, FFFF63B4
        mov     edi, dword ptr [ebp+esi*4-9C40H]        ; 00EC _ 8B. BC B5, FFFF63C0
        mov     dword ptr [ebp-9C54H], edi              ; 00F3 _ 89. BD, FFFF63AC
        neg     edi                                     ; 00F9 _ F7. DF
        mov     ecx, dword ptr [ebp-9C54H]              ; 00FB _ 8B. 8D, FFFF63AC
        shr     ecx, 31                                 ; 0101 _ C1. E9, 1F
        shl     edi, cl                                 ; 0104 _ D3. E7
        mov     eax, dword ptr [ebp-9C54H]              ; 0106 _ 8B. 85, FFFF63AC
        mov     ecx, eax                                ; 010C _ 89. C1
        neg     ecx                                     ; 010E _ F7. D9
        sbb     ecx, 0                                  ; 0110 _ 83. D9, 00
        shr     ecx, 31                                 ; 0113 _ C1. E9, 1F
        shl     eax, cl                                 ; 0116 _ D3. E0
        add     edi, eax                                ; 0118 _ 03. F8
        inc     dword ptr [ebp-9C4CH]                   ; 011A _ FF. 85, FFFF63B4
        jmp     ?_008                                   ; 0120 _ EB, B8

?_009:  call    _rdtsc                                  ; 0122 _ E8, 00000000(rel)
        sub     eax, dword ptr [ebp-9C48H]              ; 0127 _ 2B. 85, FFFF63B8
        sbb     edx, dword ptr [ebp-9C44H]              ; 012D _ 1B. 95, FFFF63BC
        push    edx                                     ; 0133 _ 52
        push    eax                                     ; 0134 _ 50
        push    offset FLAT:?_011                       ; 0135 _ 68, 00000034(segrel)
        call    _printf                                 ; 013A _ E8, 00000000(rel)
        xor     eax, eax                                ; 013F _ 31. C0
        add     esp, 12                                 ; 0141 _ 83. C4, 0C
        pop     edi                                     ; 0144 _ 5F
        pop     esi                                     ; 0145 _ 5E
        pop     ebx                                     ; 0146 _ 5B
        leave                                           ; 0147 _ C9
        ret                                             ; 0148 _ C3
_main   ENDP

_TEXT   ENDS

_DATA   SEGMENT DWORD PUBLIC 'DATA'                     ; section number 2

?_010   label byte
        db 7AH, 20H, 3DH, 20H, 61H, 72H, 72H, 5BH       ; 0000 _ z = arr[
        db 6AH, 5DH, 3EH, 30H, 3FH, 61H, 72H, 72H       ; 0008 _ j]>0?arr
        db 5BH, 6AH, 5DH, 3AH, 2DH, 61H, 72H, 72H       ; 0010 _ [j]:-arr
        db 5BH, 6AH, 5DH, 3BH, 20H, 20H, 20H, 20H       ; 0018 _ [j];   
        db 43H, 79H, 63H, 6CH, 65H, 73H, 20H, 73H       ; 0020 _ Cycles s
        db 70H, 65H, 6EH, 74H, 3AH, 25H, 6CH, 6CH       ; 0028 _ pent:%ll
        db 75H, 0AH, 00H, 00H                           ; 0030 _ u...

?_011   label byte
        db 20H, 7AH, 20H, 3DH, 20H, 28H, 28H, 2DH       ; 0034 _  z = ((-
        db 61H, 72H, 72H, 5BH, 6AH, 5DH, 29H, 3CH       ; 003C _ arr[j])<
        db 3CH, 28H, 61H, 72H, 72H, 5BH, 6AH, 5DH       ; 0044 _ <(arr[j]
        db 3CH, 30H, 29H, 29H, 2BH, 28H, 28H, 61H       ; 004C _ <0))+((a
        db 72H, 72H, 5BH, 6AH, 5DH, 29H, 3CH, 3CH       ; 0054 _ rr[j])<<
        db 28H, 61H, 72H, 72H, 5BH, 6AH, 5DH, 3EH       ; 005C _ (arr[j]>
        db 30H, 29H, 29H, 3BH, 20H, 43H, 79H, 63H       ; 0064 _ 0)); Cyc
        db 6CH, 65H, 73H, 20H, 73H, 70H, 65H, 6EH       ; 006C _ les spen
        db 74H, 3AH, 25H, 6CH, 6CH, 75H, 0AH, 00H       ; 0074 _ t:%llu..

_DATA   ENDS

CONST   SEGMENT DWORD PUBLIC 'CONST'                    ; section number 3

CONST   ENDS

_BSS    SEGMENT DWORD PUBLIC 'BSS'                      ; section number 4

_BSS    ENDS

_text$_rdtsc SEGMENT DWORD PUBLIC 'CODE'                ; section number 5
;  Communal section not supported by MASM

_rdtsc  PROC NEAR
;  COMDEF _rdtsc
        rdtsc                                           ; 0000 _ 0F 31
        ret                                             ; 0002 _ C3
_rdtsc  ENDP

_text$_rdtsc ENDS

END

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List