mirror of
https://github.com/Yours3lf/rpi-vk-driver.git
synced 2024-12-10 22:24:14 +01:00
113 lines
2.6 KiB
C
113 lines
2.6 KiB
C
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
|
|
#include "qpu_assembler.h"
|
|
|
|
int main()
|
|
{
|
|
char asm_code[] =
|
|
"sig_none ; nop = nop(r0, r0) ; nop = nop(r0, r0) ;"
|
|
"sig_none ; nop = nop(r0, r0) ; nop = nop(r0, r0) ;"
|
|
"sig_small_imm ; tlb_color_all = or.always(b, b, nop, -1) ; nop = nop(r0, r0) ;"
|
|
"sig_end ; nop = nop(r0, r0) ; nop = nop(r0, r0) ;"
|
|
"sig_none ; nop = nop(r0, r0) ; nop = nop(r0, r0) ;"
|
|
"sig_unlock_score ; nop = nop(r0, r0) ; nop = nop(r0, r0) ;"
|
|
"\0";
|
|
|
|
printf("%s", asm_code);
|
|
|
|
unsigned num_instructions = 0;
|
|
char* ptr = asm_code;
|
|
while(ptr && *ptr != '\0')
|
|
{
|
|
ptr = strstr(ptr, ";");
|
|
if(!ptr) break;
|
|
ptr = strstr(ptr+(ptr!=0), ";");
|
|
if(!ptr) break;
|
|
ptr = strstr(ptr+(ptr!=0), ";");
|
|
if(ptr)
|
|
{
|
|
ptr += 1;
|
|
num_instructions += 1;
|
|
}
|
|
}
|
|
|
|
//printf("Num instructions: %i\n", num_instructions);
|
|
|
|
if(!num_instructions)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
uint64_t instruction_size = sizeof(uint64_t)*num_instructions;
|
|
uint64_t* instructions = malloc(instruction_size);
|
|
|
|
assemble_qpu_asm(asm_code, instructions);
|
|
|
|
for(int c = 0; c < instruction_size; ++c)
|
|
{
|
|
unsigned char d = ((char*)instructions)[c];
|
|
//printf("%#x,\t", d);
|
|
if((c+1)%8==0)
|
|
{
|
|
//printf("\n");
|
|
}
|
|
}
|
|
|
|
printf("\n\n");
|
|
|
|
for(int c = 0; c < num_instructions; ++c)
|
|
{
|
|
disassemble_qpu_asm(instructions[c]);
|
|
}
|
|
|
|
const char fragBytes[] =
|
|
{
|
|
00, 0x70, 0x9e, 00, 0xe7, 0x9, 00, 0x10,
|
|
00, 0x70, 0x9e, 00, 0xe7, 0x9, 00, 0x10,
|
|
0x80, 0x7d, 0x82, 0x15, 0xa7, 0xb, 0x2, 0x10,
|
|
00, 0x70, 0x9e, 00, 0xe7, 0x9, 00, 0x30,
|
|
00, 0x70, 0x9e, 00, 0xe7, 0x9, 00, 0x10,
|
|
00, 0x70, 0x9e, 00, 0xe7, 0x9, 00, 0x50
|
|
};
|
|
|
|
unsigned numFragInstructions = sizeof(fragBytes) / sizeof(uint64_t);
|
|
|
|
const char vertBytes[] =
|
|
{
|
|
0x80, 0x1f, 0x82, 0x2, 0x27, 0x10, 0x2, 0xd0,
|
|
00, 0x1a, 0x20, 00, 0x67, 0x4c, 0x2, 0xe0,
|
|
0x37, 00, 0xc2, 0x20, 0xe0, 0x49, 00, 0x10,
|
|
0x7, 00, 0x9c, 0x20, 0xe1, 0x49, 00, 0x10,
|
|
0x77, 0x2, 0xc2, 0x27, 0x22, 0x40, 0x12, 0x10,
|
|
0x17, 00, 0x9c, 0x20, 0xe3, 0x49, 00, 0x10,
|
|
0xc0, 0x76, 0x9e, 0x7, 0x27, 00, 0x22, 0x10,
|
|
00, 0x1a, 00, 00, 0x67, 0x5c, 0x2, 0xe0,
|
|
0x80, 0x7d, 0x2, 0x15, 0x27, 0xc, 0x2, 0x10,
|
|
0x80, 0x7d, 0x82, 0x15, 0x27, 0xc, 0x2, 0x10,
|
|
0xc0, 0xf, 0x9c, 0x15, 0x27, 0xc, 0x2, 0x10,
|
|
00, 0x70, 0x9e, 00, 0xe7, 0x9, 00, 0x30,
|
|
00, 0x70, 0x9e, 00, 0xe7, 0x9, 00, 0x10,
|
|
00, 0x70, 0x9e, 00, 0xe7, 0x9, 00, 0x10,
|
|
};
|
|
|
|
unsigned numVertInstructions = sizeof(vertBytes) / sizeof(uint64_t);
|
|
|
|
printf("\n\n");
|
|
|
|
for(int c = 0; c < numVertInstructions; ++c)
|
|
{
|
|
disassemble_qpu_asm(((uint64_t*)vertBytes)[c]);
|
|
}
|
|
|
|
printf("\n\n");
|
|
|
|
for(int c = 0; c < numFragInstructions; ++c)
|
|
{
|
|
disassemble_qpu_asm(((uint64_t*)fragBytes)[c]);
|
|
}
|
|
|
|
return 0;
|
|
}
|