[Mesa-dev] [PATCH 1/2] gm107/ir: adjust jump offsets to avoid sched info

Ilia Mirkin imirkin at alum.mit.edu
Wed Nov 2 17:21:27 UTC 2016


Good idea, will put a v2 together.

On Wed, Nov 2, 2016 at 1:20 PM, Samuel Pitoiset
<samuel.pitoiset at gmail.com> wrote:
> This seems like redundant, and because the GM107 emitter already has a bunch
> of emitXXX() helpers, how about adding emitTARG()? Like:
>
> void
> CodeEmitterGM107::emitTARG()
> {
>   int32_t pos = insn->target.bb->binPos;
>   if (writeIssueDelays && !(pos & 0x1f))
>     pos += 8;
>   emitField(0x14, 24, pos - (codeSize + 8));
> }
>
> On 11/02/2016 05:38 AM, Ilia Mirkin wrote:
>>
>> This doesn't seem to cause real issues, but it makes compiled code
>> easier to follow when the jumps go to the right place.
>>
>> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
>> ---
>>  .../drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp | 27
>> +++++++++++++++++-----
>>  1 file changed, 21 insertions(+), 6 deletions(-)
>>
>> diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp
>> b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp
>> index 5ed2ad4..ecd3faa 100644
>> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp
>> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp
>> @@ -557,15 +557,18 @@ CodeEmitterGM107::emitCAL()
>>     }
>>
>>     if (!insn->srcExists(0) || insn->src(0).getFile() !=
>> FILE_MEMORY_CONST) {
>> +      int32_t pos = insn->target.bb->binPos;
>> +      if (writeIssueDelays && !(pos & 0x1f))
>> +         pos += 8;
>>        if (!insn->absolute)
>> -         emitField(0x14, 24, insn->target.bb->binPos - (codeSize + 8));
>> +         emitField(0x14, 24, pos - (codeSize + 8));
>>        else {
>>           if (insn->builtin) {
>>              int pcAbs =
>> targGM107->getBuiltinOffset(insn->target.builtin);
>>              addReloc(RelocEntry::TYPE_BUILTIN, 0, pcAbs, 0xfff00000,
>> 20);
>>              addReloc(RelocEntry::TYPE_BUILTIN, 1, pcAbs, 0x000fffff,
>> -12);
>>           } else {
>> -            emitField(0x14, 32, insn->target.bb->binPos);
>> +            emitField(0x14, 32, pos);
>>           }
>>        }
>>     } else {
>> @@ -582,7 +585,10 @@ CodeEmitterGM107::emitPCNT()
>>     emitInsn(0xe2b00000, 0);
>>
>>     if (!insn->srcExists(0) || insn->src(0).getFile() !=
>> FILE_MEMORY_CONST) {
>> -      emitField(0x14, 24, insn->target.bb->binPos - (codeSize + 8));
>> +      int32_t pos = insn->target.bb->binPos;
>> +      if (writeIssueDelays && !(pos & 0x1f))
>> +         pos += 8;
>> +      emitField(0x14, 24, pos - (codeSize + 8));
>>     } else {
>>        emitCBUF (0x24, -1, 20, 16, 0, insn->src(0));
>>        emitField(0x05, 1, 1);
>> @@ -604,7 +610,10 @@ CodeEmitterGM107::emitPBK()
>>     emitInsn(0xe2a00000, 0);
>>
>>     if (!insn->srcExists(0) || insn->src(0).getFile() !=
>> FILE_MEMORY_CONST) {
>> -      emitField(0x14, 24, insn->target.bb->binPos - (codeSize + 8));
>> +      int32_t pos = insn->target.bb->binPos;
>> +      if (writeIssueDelays && !(pos & 0x1f))
>> +         pos += 8;
>> +      emitField(0x14, 24, pos - (codeSize + 8));
>>     } else {
>>        emitCBUF (0x24, -1, 20, 16, 0, insn->src(0));
>>        emitField(0x05, 1, 1);
>> @@ -626,7 +635,10 @@ CodeEmitterGM107::emitPRET()
>>     emitInsn(0xe2700000, 0);
>>
>>     if (!insn->srcExists(0) || insn->src(0).getFile() !=
>> FILE_MEMORY_CONST) {
>> -      emitField(0x14, 24, insn->target.bb->binPos - (codeSize + 8));
>> +      int32_t pos = insn->target.bb->binPos;
>> +      if (writeIssueDelays && !(pos & 0x1f))
>> +         pos += 8;
>> +      emitField(0x14, 24, pos - (codeSize + 8));
>>     } else {
>>        emitCBUF (0x24, -1, 20, 16, 0, insn->src(0));
>>        emitField(0x05, 1, 1);
>> @@ -648,7 +660,10 @@ CodeEmitterGM107::emitSSY()
>>     emitInsn(0xe2900000, 0);
>>
>>     if (!insn->srcExists(0) || insn->src(0).getFile() !=
>> FILE_MEMORY_CONST) {
>> -      emitField(0x14, 24, insn->target.bb->binPos - (codeSize + 8));
>> +      int32_t pos = insn->target.bb->binPos;
>> +      if (writeIssueDelays && !(pos & 0x1f))
>> +         pos += 8;
>> +      emitField(0x14, 24, pos - (codeSize + 8));
>>     } else {
>>        emitCBUF (0x24, -1, 20, 16, 0, insn->src(0));
>>        emitField(0x05, 1, 1);
>>
>
> --
> -Samuel


More information about the mesa-dev mailing list