News:

MASM32 SDK Description, downloads and other helpful links
MASM32.com New Forum Link
masmforum WebSite

A New Testbed for MASM32 Forum

Started by frktons, September 21, 2010, 05:25:26 PM

Previous topic - Next topic

hutch--

Frank,

Processor is a Core2 Quad running at 3 gig. OS is XP SP3.

I commented out line 591'


    ; invoke AxCPUid, offset CpuBuffer


and it works correctly.


┌────────────────────────────────────────────────────────────────────────────────────────┐
│OS  : Microsoft Windows XP Professional Service Pack 3 (build 2600)                     │
│CPU :                                                                                   │
│                                                                                        │
│Test: Conversion of a screen buffer from DOS to Windows CHAR_INFO structure             │
├──────────────────────────────────┬─────────┬──────────┬──────────┬──────────┬──────────┤
│        Algorithm notes           │Proc Size│ Test # 1 │ Test # 2 │ Test # 3 │ Test # 4 │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│01 Alex / MMX - PUNPCKLBW MOVQ    │    64   │    3.187 │    3.188 │    3.186 │    3.190 │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│02 Frank / 486 - MOV-BSWAP        │    43   │    8.395 │    8.395 │    8.389 │    8.393 │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│03 Frank / XMM PUNPCKLBW MOVDQA   │    44   │    1.584 │    1.583 │    1.584 │    1.581 │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│04 Alex / MMX - PUNPCKLBW MOVNTQ  │    64   │    5.277 │    5.211 │    5.195 │    5.208 │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│05 Frank / 386 - MOV-SHIFT        │    42   │    8.461 │    8.443 │    8.446 │    8.447 │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│06                                │         │          │          │          │          │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│07                                │         │          │          │          │          │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│08                                │         │          │          │          │          │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│09                                │         │          │          │          │          │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│10                                │         │          │          │          │          │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│11                                │         │          │          │          │          │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│12                                │         │          │          │          │          │
├──────────────────────────────────┴─────────┴──────────┴──────────┴──────────┴──────────┤
│ Esc   Exit    F1 Help    Copy     Run       View       Save       Display 12   Info    │
└────────────────────────────────────────────────────────────────────────────────────────┘


Download site for MASM32      New MASM Forum
https://masm32.com          https://masm32.com/board/index.php

frktons

Thanks Steve.   :U

This is what I was looking for.

Either Alex CPUID routine has some faults, or my code to translate its returned string
is buggy. We'll see. If you feel like, there is a PopBox PROC somewhere, could you
try to pop a message after the program flow is back from
invoke AxCPUid, offset CpuBuffer
in order to see if it is inside or outside the routine that we have the bug?

Frank

Mind is like a parachute. You know what to do in order to use it :-)

dedndave

oddly enough, i am able to assemble the file as is with ML version 6.15 under XP sp2   :red

frktons

Quote from: dedndave on November 11, 2010, 11:46:56 AM
oddly enough, i am able to assemble the file as is with ML version 6.15 under XP sp2   :red

I changed all the instructions that were ML 10 dependent, to make it compatible with old MASM
versions as well.  :P

Mind is like a parachute. You know what to do in order to use it :-)

frktons

In order to test long string CPU description I simulated it with the code that is
commented  inside the source:

; -------------------------------------------------------------------------------
; Test a long Cpu description
; -------------------------------------------------------------------------------
;
;    .data
;
;    Temp  db  "Intel(R) Core(TM)2 CPU 6600 @ 2.40GHz with MMX, SSE1, SSE2, SSE3,"
;          db  " SSSE3, SSE4.1, SSE4.2 and some more stuff",0
;
;    .code
;
;    mov    Lenght, len(ADDR Temp)
;
;    INVOKE AssignStr, ADDR CpuBuffer, ADDR Temp,
;                      DWORD PTR Lenght
;

;
;    jmp    TestDisplay
;
; -------------------------------------------------------------------------------
; End of Test a long Cpu description
; -------------------------------------------------------------------------------


and with this PROC I split the long string in two shorter one, with a max of 80 bytes each:


; ----------------------------------------------------------------------------
;  The Cpu Description string is splitted in two parts if Lenght > 80
; ----------------------------------------------------------------------------


SplitCpuDesc   PROC

    lea esi, CpuBuffer
    add esi, ( MaxLenCpuDesc - One )
    mov Lenght1, MaxLenCpuDesc
    mov Lenght2, Zero 

    mov al, BYTE PTR [esi] 

    .WHILE ( al != "," )

        dec esi
        dec Lenght1 
        mov edi, [esi]
       
    .ENDW

    lea esi, CpuBuffer
    lea edi, CpuDesc1

    mov ecx, Lenght1

CopyChar1:

    rep movs BYTE PTR [edi], BYTE PTR [esi]

    inc esi

    mov PtrCpuBuf2, esi

    mov eax, ( Lenght )
    sub eax, Lenght1
    mov Lenght2, eax

    lea edi, CpuDesc2 

    mov ecx, Lenght2


CopyChar2:

    rep movs BYTE PTR [edi], BYTE PTR [esi]

    ret

SplitCpuDesc   ENDP



That means I tried to prevent that strings wider than 80 bytes could mess
the formatted display.

Alex signaled to me via PM that something is wrong with wider strings.
But I have no SSE4 machine to test, so I asked somebody to do it.

Now Alex and Me have to check where the bug is.

Frank

Mind is like a parachute. You know what to do in order to use it :-)

hutch--

Frank, your beta 0.9 works correctly with the CPUID code.


┌────────────────────────────────────────────────────────────────────────────────────────┐
│OS  : Microsoft Windows XP Professional Service Pack 3 (build 2600)                     │
│CPU : Intel(R) Core(TM)2 Quad CPU Q9650 @ 3.00GHz with MMX, SSE1, SSE2, SSE3, SSSE3, SSE4
.1                                                                                       │
│Test: Conversion of a screen buffer from DOS to Windows CHAR_INFO structure             │
├─────────────────────────────────┬─────────┬──────────┬──────────┬──────────┬──────────┬┤
│        Algorithm notes          │Proc Size│ Test # 1 │ Test # 2 │ Test # 3 │ Test # 4 ││
├─────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┼┤
│01 Alex / MMX - PUNPCKLBW        │   62    │    5.168 │    5.158 │    5.181 │    5.198 ││
├─────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┼┤
│02 Frank / 486 - MOV-BSWAP       │   43    │    8.326 │    8.326 │    8.328 │    8.325 ││
├─────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┼┤
│03 Frank / XMM PUNPCKLBW MOVDQA  │   44    │    1.588 │    1.585 │    1.585 │    1.585 ││
├─────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┼┤
│04                               │         │          │          │          │          ││
├─────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┼┤
│05                               │         │          │          │          │          ││
├─────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┼┤
│06                               │         │          │          │          │          ││
├─────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┼┤
│07                               │         │          │          │          │          ││
├─────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┼┤
│08                               │         │          │          │          │          ││
├─────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┼┤
│09                               │         │          │          │          │          ││
├─────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┼┤
│10                               │         │          │          │          │          ││
├─────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┼┤
│11                               │         │          │          │          │          ││
├─────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┼┤
│12                               │         │          │          │          │          ││
├─────────────────────────────────┴─────────┴──────────┴──────────┴──────────┴──────────┴┤
│ Esc   Exit    F1     Copy        Run       View       Save       Display 12 Help       │
└────────────────────────────────────────────────────────────────────────────────────────┘
Download site for MASM32      New MASM Forum
https://masm32.com          https://masm32.com/board/index.php

frktons

OK Steve. This is a partial solution to the problem. The CPUID code works fine,
but the returned string is messed up by other code; mine  :P

I'll try to fix this part as well.

Thanks for your help

Frank
Mind is like a parachute. You know what to do in order to use it :-)

frktons

Well. I used the exact string that Steve example shows, and indeed the program freezes.
With a wider one it didn't happen. Let me check why.

Frank
Mind is like a parachute. You know what to do in order to use it :-)

frktons

I think I fixed it. A leftover of a previous version of Split PROC was messing things.

Test this please. It should also compile without problems.

Frank

The display for Hutch test should be :


┌────────────────────────────────────────────────────────────────────────────────────────┐
│OS  : Microsoft Windows 7 Ultimate Edition, 64-bit (build 7600)                         │
│CPU : Intel(R) Core(TM)2 Quad CPU Q9650 @ 3.00GHz with MMX, SSE1, SSE2, SSE3, SSSE3,    │
│      SSE4.1                                                                            │
│Test: Conversion of a screen buffer from DOS to Windows CHAR_INFO structure             │
├──────────────────────────────────┬─────────┬──────────┬──────────┬──────────┬──────────┤
│        Algorithm notes           │Proc Size│ Test # 1 │ Test # 2 │ Test # 3 │ Test # 4 │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│01 Alex / MMX - PUNPCKLBW MOVQ    │    64   │    3.117 │    3.116 │    3.118 │    3.118 │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│02 Frank / 486 - MOV-BSWAP        │    43   │    9.064 │    9.064 │    9.064 │    9.063 │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│03 Frank / XMM PUNPCKLBW MOVDQA   │    44   │    2.336 │    2.336 │    2.336 │    2.336 │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│04 Alex / MMX - PUNPCKLBW MOVNTQ  │    64   │    6.030 │    6.103 │    6.111 │    6.112 │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│05 Frank / 386 - MOV-SHIFT        │    42   │    8.947 │    8.947 │    9.087 │    9.072 │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤

Mind is like a parachute. You know what to do in order to use it :-)

dedndave

Frank,
in order to test the CPU strings, i added a few lines   :bg
    shr ecx,9    ; has SSSE3
stc
    adc [ebp].AxCPUid_Features.IsSSSE3,0
   
    shr ecx,10    ; has SSE4.1
stc
    adc [ebp].AxCPUid_Features.IsSSE41,0
   
    shr ecx,1    ; has SSE4.2
stc
    adc [ebp].AxCPUid_Features.IsSSE42,0

the result looks like this...
┌────────────────────────────────────────────────────────────────────────────────────────┐
│OS  : Microsoft Windows XP Professional Service Pack 2 (build 2600)                     │
│CPU : Intel(R) Pentium(R) 4 CPU 3.00GHz with MMX, SSE1, SSE2, SSE3, SSSE3, SSE4.1,      │
│      SSE4.2                                                                            │
│Test: Conversion of a screen buffer from DOS to Windows CHAR_INFO structure             │
├──────────────────────────────────┬─────────┬──────────┬──────────┬──────────┬──────────┤
│        Algorithm notes           │Proc Size│ Test # 1 │ Test # 2 │ Test # 3 │ Test # 4 │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│01 Alex / MMX - PUNPCKLBW MOVQ    │    64   │    9.413 │    9.455 │    9.435 │    9.416 │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│02 Frank / 486 - MOV-BSWAP        │    43   │   13.591 │   13.604 │   13.593 │   13.618 │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│03 Frank / XMM PUNPCKLBW MOVDQA   │    44   │    4.391 │    4.356 │    4.384 │    4.362 │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│04 Alex / MMX - PUNPCKLBW MOVNTQ  │    64   │    9.255 │    9.343 │    9.258 │    9.199 │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│05 Frank / 386 - MOV-SHIFT        │    42   │   13.611 │   13.616 │   13.587 │   13.612 │


you could shorten things a bit
if a CPU has SSSE3 or SSE4, it also has 1, 2, 3
if a CPU has SSE3, it also has 1, 2
if a CPU has SSE2, it also has 1
SSE1 is actually just called SSE
if it has any SSE, it has MMX, but it is still nice to see that one
but, only one SSE level is needed:
SSE or SSE2 or SSE3 or SSSE3 or SSE4.1 or SSE4.2

frktons

Quote from: dedndave on November 11, 2010, 12:48:26 PM
Frank,
in order to test the CPU strings, i added a few lines   :bg
    shr ecx,9    ; has SSSE3
stc
    adc [ebp].AxCPUid_Features.IsSSSE3,0
   
    shr ecx,10    ; has SSE4.1
stc
    adc [ebp].AxCPUid_Features.IsSSE41,0
   
    shr ecx,1    ; has SSE4.2
stc
    adc [ebp].AxCPUid_Features.IsSSE42,0

the result looks like this...
┌────────────────────────────────────────────────────────────────────────────────────────┐
│OS  : Microsoft Windows XP Professional Service Pack 2 (build 2600)                     │
│CPU : Intel(R) Pentium(R) 4 CPU 3.00GHz with MMX, SSE1, SSE2, SSE3, SSSE3, SSE4.1,      │
│      SSE4.2                                                                            │
│Test: Conversion of a screen buffer from DOS to Windows CHAR_INFO structure             │
├──────────────────────────────────┬─────────┬──────────┬──────────┬──────────┬──────────┤
│        Algorithm notes           │Proc Size│ Test # 1 │ Test # 2 │ Test # 3 │ Test # 4 │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│01 Alex / MMX - PUNPCKLBW MOVQ    │    64   │    9.413 │    9.455 │    9.435 │    9.416 │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│02 Frank / 486 - MOV-BSWAP        │    43   │   13.591 │   13.604 │   13.593 │   13.618 │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│03 Frank / XMM PUNPCKLBW MOVDQA   │    44   │    4.391 │    4.356 │    4.384 │    4.362 │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│04 Alex / MMX - PUNPCKLBW MOVNTQ  │    64   │    9.255 │    9.343 │    9.258 │    9.199 │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│05 Frank / 386 - MOV-SHIFT        │    42   │   13.611 │   13.616 │   13.587 │   13.612 │


you could shorten things a bit
if a CPU has SSSE3 or SSE4, it also has 1, 2, 3
if a CPU has SSE3, it also has 1, 2
if a CPU has SSE2, it also has 1
SSE1 is actually just called SSE
if it has any SSE, it has MMX, but it is still nice to see that one
but, only one SSE level is needed:
SSE or SSE2 or SSE3 or SSSE3 or SSE4.1 or SSE4.2

Yes Dave, we are discussing about this with Alex via PM. We didn't arrive at a simple conclusion
though. We are considering AMD extensions as well, and probably a long string will be necessary
anyway.

Stay tuned and thanks for your suggestions.

Frank
Mind is like a parachute. You know what to do in order to use it :-)

hutch--

This one works fine Frank.


┌────────────────────────────────────────────────────────────────────────────────────────┐
│OS  : Microsoft Windows XP Professional Service Pack 3 (build 2600)                     │
│CPU : Intel(R) Core(TM)2 Quad CPU Q9650 @ 3.00GHz with MMX, SSE1, SSE2, SSE3, SSSE3,    │
│      SSE4.1                                                                            │
│Test: Conversion of a screen buffer from DOS to Windows CHAR_INFO structure             │
├──────────────────────────────────┬─────────┬──────────┬──────────┬──────────┬──────────┤
│        Algorithm notes           │Proc Size│ Test # 1 │ Test # 2 │ Test # 3 │ Test # 4 │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│01 Alex / MMX - PUNPCKLBW MOVQ    │    64   │    3.113 │    3.118 │    3.113 │    3.114 │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│02 Frank / 486 - MOV-BSWAP        │    43   │    8.347 │    8.356 │    8.346 │    8.347 │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│03 Frank / XMM PUNPCKLBW MOVDQA   │    44   │    1.579 │    1.578 │    1.577 │    1.577 │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│04 Alex / MMX - PUNPCKLBW MOVNTQ  │    64   │    5.177 │    5.209 │    5.177 │    5.180 │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│05 Frank / 386 - MOV-SHIFT        │    42   │    8.289 │    8.283 │    8.292 │    8.291 │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│06                                │         │          │          │          │          │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│07                                │         │          │          │          │          │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│08                                │         │          │          │          │          │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│09                                │         │          │          │          │          │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│10                                │         │          │          │          │          │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│11                                │         │          │          │          │          │
├──────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┤
│12                                │         │          │          │          │          │
├──────────────────────────────────┴─────────┴──────────┴──────────┴──────────┴──────────┤
│ Esc   Exit    F1 Help    Copy     Run       View       Save       Display 12   Info    │
└────────────────────────────────────────────────────────────────────────────────────────┘
Download site for MASM32      New MASM Forum
https://masm32.com          https://masm32.com/board/index.php

dedndave

yes - well - if you serch the forum, Jochen, Hutch, and I have all attacked CPU identification to one degree or another - lol
it's a bag of worms, at best
but there are routines that create these strings already

let me see if i can find them....


ToutEnMasm


┌────────────────────────────────────────────────────────────────────────────────────────┐
│OS  : Microsoft Windows XP Professional Service Pack 3 (build 2600)                     │
│CPU : Intel(R) Celeron(R) CPU 2.80GHz with MMX, SSE1, SSE2, SSE3                        │
│                                                                                        │
│Test: Conversion of a screen buffer from DOS to Windows CHAR_INFO structure             │
├─────────────────────────────────┬─────────┬──────────┬──────────┬──────────┬──────────┬┤
│        Algorithm notes          │Proc Size│ Test # 1 │ Test # 2 │ Test # 3 │ Test # 4 ││
├─────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┼┤
│01 Alex / MMX - PUNPCKLBW        │   62    │   12.826 │   12.047 │   12.675 │   12.572 ││
├─────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┼┤
│02 Frank / 486 - MOV-BSWAP       │   43    │   14.453 │   14.160 │   14.631 │   14.391 ││
├─────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┼┤
│03 Frank / XMM - PUNPCKLBW       │   44    │    4.436 │    4.433 │    4.427 │    4.431 ││
├─────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┼┤
│04                               │         │          │          │          │          ││
├─────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┼┤
│05                               │         │          │          │          │          ││
├─────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┼┤
│06                               │         │          │          │          │          ││
├─────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┼┤
│07                               │         │          │          │          │          ││
├─────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┼┤
│08                               │         │          │          │          │          ││
├─────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┼┤
│09                               │         │          │          │          │          ││
├─────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┼┤
│10                               │         │          │          │          │          ││
├─────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┼┤
│11                               │         │          │          │          │          ││
├─────────────────────────────────┼─────────┼──────────┼──────────┼──────────┼──────────┼┤
│12                               │         │          │          │          │          ││
├─────────────────────────────────┴─────────┴──────────┴──────────┴──────────┴──────────┴┤
│ Esc   Exit    F1     Copy        Run       View       Save       Display 12 Help       │
└────────────────────────────────────────────────────────────────────────────────────────┘

GOOD LOOK with Teletype