Mailinglist Archive: radeonhd (427 mails)
| < Previous | Next > |
Re: [radeonhd] Understanding ATI assembler and AtomDis
- From: Alex Deucher <alexdeucher@xxxxxxxxx>
- Date: Wed, 20 May 2009 09:45:47 -0400
- Message-id: <a728f9f90905200645r741c75e5uc5f8c1be19c69991@xxxxxxxxxxxxxx>
2009/5/20 Rafał Miłecki <zajec5@xxxxxxxxx>:
That's the bytecode for the instruction. The decoded instruction is
written next to it.
It's saying move the lower 2 bytes of register 0x180 to the lower two
bytes of workspace 0.
In atom you have param space (the inputs to the command tables), work
space (local storage used by the interpreter when executing scripts
and then the various registers: reg (direct mmio space), pll (indirect
pll register space), mc (indirect memory controller register space).
The direct registers are listed as dword offsets in atom so you have
to multiply them by 4 to get the byte offsets. so 0x180 in atom is
0x600 is byte offsets. PLL and MC registers are indirect indexes so
the offsets are index values. Registers are 32 bits, and the atom ops
can operate on individual bytes or groups of bytes. In this case the
op is operating on the lower two bytes (hence the ..XX). In your
example the lower two bytes are 0x4567. So this op would roughly
translate into:
work[00] = (work[00] & 0xffff0000) | (INREG(0x600) & 0xffff);
Divide the current workspace value by 8.
Alex
--
To unsubscribe, e-mail: radeonhd+unsubscribe@xxxxxxxxxxxx
For additional commands, e-mail: radeonhd+help@xxxxxxxxxxxx
I need little help to understand disassembled code from by BIOS.
What does actually mean second column in AtomDis c output?
0009: 0308008001 MOVE work[00] [..XX] <- reg[0180] [..XX]
I don't understand that 0308008001.
That's the bytecode for the instruction. The decoded instruction is
written next to it.
It's saying move the lower 2 bytes of register 0x180 to the lower two
bytes of workspace 0.
Next, what is work[00]? Is this just some not used register for
calculations? Am I right?
In atom you have param space (the inputs to the command tables), work
space (local storage used by the interpreter when executing scripts
and then the various registers: reg (direct mmio space), pll (indirect
pll register space), mc (indirect memory controller register space).
Then how does MOVE work?
MOVE work[00] [..XX] <- reg[0180] [..XX]
Let's say I get following output:
# rhd_dump -r 0180,0184 01:00.0
0x0180: 0x01234567
0x0184: 0x89ABCDE
does it mean sth following:
0x0180: 0x01
0x0181: 0x23
0x0182: 0x45
0x0183: 0x67
?
If so, what is [..XX] part of 0x0180? Shuld I treat 0x0180 as 0x0001
and [..XX] means 0x01 then?
The direct registers are listed as dword offsets in atom so you have
to multiply them by 4 to get the byte offsets. so 0x180 in atom is
0x600 is byte offsets. PLL and MC registers are indirect indexes so
the offsets are index values. Registers are 32 bits, and the atom ops
can operate on individual bytes or groups of bytes. In this case the
op is operating on the lower two bytes (hence the ..XX). In your
example the lower two bytes are 0x4567. So this op would roughly
translate into:
work[00] = (work[00] & 0xffff0000) | (INREG(0x600) & 0xffff);
Finally, how does work
DIV WS_QUOT/LOW32 [XXXX] <- 00000008
?
Divide the current workspace value by 8.
Alex
--
To unsubscribe, e-mail: radeonhd+unsubscribe@xxxxxxxxxxxx
For additional commands, e-mail: radeonhd+help@xxxxxxxxxxxx
| < Previous | Next > |