FPU stack and XMM registers in ddbg
Jascha Wetzel
"[firstname]" at mainia.de
Sun Apr 29 05:38:47 PDT 2007
yeah, i was going the lazy way of always printing them in all possible
types, but i guess for XMM regs there are too many.
imho, the right way to do this is to allow registers in expressions.
then they can be cast to the desired type.
->= cast(float[4])xmm0
That should also come in handy if you want to do something like
->= cast(MyClass*)eax
Daniel Keep wrote:
> Jascha Wetzel wrote:
>> that's right. Ddbg doesn't support debugging non-D code, though.
>> on the other hand SSE2 only means new registers on AMD cpus and 3dnow is
>> just a reinterpretation of the mmx registers.
>> i added all the interpretations of the XMM and MM registers but didn't
>> bother to get the AMD specific SSE2 extensions.
>>
>> therefore it's going to be MMX, 3DNOW!, SSE and SSE2 intel.
>> the switches will be cpu, fpu, mmx, sse.
>> here is what the new full register dump looks like:
>>
>> EAX = 00000002 EBX = 00000004 ECX = 00000004 EDX = 0012ff20
>> EDI = 00000001 ESI = 00000001 EBP = 0012ff30 ESP = 0012fedc
>> EIP = 004020ea EFL = 00000302
>> CS = 0000001b DS = 00000023 ES = 00000023 FS = 0000003b
>> GS = 00000000 SS = 00000023
>>
>> FCW = 137f FSW = 2100 FTW = 00ff FOP = 0014
>> IP = 00000000 CS = 0000 DP = 00000000 DS = 0000
>> ST0 = 1.0300000000000000e+01
>> ST1 = 3.8000000000000000e+00
>> ST2 = 2.4000000000000000e+00
>> ST3 = 5.6000000000000000e+00
>> ST4 = 4.6891198690254339e-4932
>> ST5 = 3.6451995318824746e-4951
>> ST6 = 8.1918522314966046e+4456
>> ST7 = 0.0000000000000000e+00
>>
>> MM0 = a4cccccccccccccd
>> = [-1.07374e+08, -8.88178e-17]
>> MM1 = f333333333333333
>> = [4.17233e-08, -1.41977e+31]
>> MM2 = 999999999999999a
>> = [-1.58819e-23, -1.58819e-23]
>> MM3 = b333333333333333
>> = [4.17233e-08, -4.17233e-08]
>> MM4 = b2857a24805b09dd
>> = [-8.36057e-39, -1.55388e-08]
>> MM5 = 0000000000000001
>> = [1.4013e-45, 0]
>> MM6 = badb0d00804fd645
>> = [-7.33187e-39, -0.00167122]
>> MM7 = 00000017e62a9390
>> = [-2.01381e+23, 3.22299e-44]
>>
>> MXCSR = 00001f80
>> XMM0 = 406d5224dd2f1aa0405edd2f1a9fbe77
>> = [6.60686e-23, 3.48225, -7.88598e+17, 3.70814]
>> = [123.456, 234.567]
>> XMM1 = 406d5224dd2f1aa0405edd2f1a9fbe77
>> = [6.60686e-23, 3.48225, -7.88598e+17, 3.70814]
>> = [123.456, 234.567]
>> XMM2 = 43e464fe43acd6c9436a912742f6e979
>> = [123.456, 234.567, 345.678, 456.789]
>> = [5.98235776617e+16, 1.17566315604e+19]
>> XMM3 = 43e464fe43acd6c9436a912742f6e979
>> = [123.456, 234.567, 345.678, 456.789]
>> = [5.98235776617e+16, 1.17566315604e+19]
>> XMM4 = 43e464fe43acd6c9436a912742f6e979
>> = [123.456, 234.567, 345.678, 456.789]
>> = [5.98235776617e+16, 1.17566315604e+19]
>> XMM5 = 43e464fe43acd6c9436a912742f6e979
>> = [123.456, 234.567, 345.678, 456.789]
>> = [5.98235776617e+16, 1.17566315604e+19]
>> XMM6 = 43e464fe43acd6c9436a912742f6e979
>> = [123.456, 234.567, 345.678, 456.789]
>> = [5.98235776617e+16, 1.17566315604e+19]
>> XMM7 = 43e464fe43acd6c9436a912742f6e979
>> = [123.456, 234.567, 345.678, 456.789]
>> = [5.98235776617e+16, 1.17566315604e+19]
>>
>> Frits van Bommel wrote:
>>> Jascha Wetzel wrote:
>>>> oh ok, forget SSE2 and 3DNOW! - makes little sense as long D inline asm
>>>> doesn't support them...
>>> That doesn't mean they won't be used in (mostly-)D programs. You can
>>> still use a separate assembler and link the output in.
>>>
>>> (And for the really perverse, db and friends can emit any code you like
>>> from within the inline assembler :P)
>
> Many thanks for this. The only thing is that the MM and XMM registers
> can store quite a few different types. For instance, IIRC, all the
> original MMX instructions dealt with integers, whilst 3DNow! added
> floats. SSE2 also adds integer types for the XMM registers, so being
> able to say "dump the XMM registers as, oh let's call them uint's" would
> be handy :)
>
> Other than that, looks perfect :)
>
> -- Daniel
>
More information about the Digitalmars-d-debugger
mailing list