summaryrefslogtreecommitdiff
path: root/assembler
diff options
context:
space:
mode:
authorDamien Lespiau <damien.lespiau@intel.com>2013-01-23 15:13:55 +0000
committerDamien Lespiau <damien.lespiau@intel.com>2013-03-04 15:54:38 +0000
commitcce4fc2c36b18c349f0fe63f14f15ec6dd880fc0 (patch)
tree409bcb5b8f690cc7b34ff32ba1c0d9d6297eb87f /assembler
parent6b5680475761e22ec0fb46bc518b5e4e61e0c863 (diff)
assembler: Make struct declared_register use struct brw_reg
It's time to start converting the emission code in gram.y to use libbrw infrastructure. Let's start with using brw_reg for declared register. Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
Diffstat (limited to 'assembler')
-rw-r--r--assembler/gen4asm.h4
-rw-r--r--assembler/gram.y46
2 files changed, 26 insertions, 24 deletions
diff --git a/assembler/gen4asm.h b/assembler/gen4asm.h
index 8dd08b78..d81f597f 100644
--- a/assembler/gen4asm.h
+++ b/assembler/gen4asm.h
@@ -33,6 +33,8 @@
#include <stdbool.h>
#include <assert.h>
+#include "brw_reg.h"
+
typedef unsigned char GLubyte;
typedef short GLshort;
typedef unsigned int GLuint;
@@ -226,7 +228,7 @@ extern struct program_defaults program_defaults;
struct declared_register {
char *name;
- struct direct_reg base;
+ struct brw_reg reg;
int element_size;
struct region src_region;
int dst_region;
diff --git a/assembler/gram.y b/assembler/gram.y
index 342c66d8..7b4cdeea 100644
--- a/assembler/gram.y
+++ b/assembler/gram.y
@@ -353,9 +353,9 @@ declare_pragma: DECLARE_PRAGMA STRING declare_base declare_elementsize declare_s
reg = calloc(sizeof(struct declared_register), 1);
reg->name = $2;
}
- reg->base.reg_file = $3.reg_file;
- reg->base.reg_nr = $3.reg_nr;
- reg->base.subreg_nr = $3.subreg_nr;
+ reg->reg.file = $3.reg_file;
+ reg->reg.nr = $3.reg_nr;
+ reg->reg.subnr = $3.subreg_nr;
reg->element_size = $4;
reg->src_region = $5;
reg->dst_region = $6;
@@ -1548,9 +1548,9 @@ dst: dstoperand | dstoperandex
dstoperand: symbol_reg dstregion
{
memset (&$$, '\0', sizeof ($$));
- $$.reg_file = $1.base.reg_file;
- $$.reg_nr = $1.base.reg_nr;
- $$.subreg_nr = $1.base.subreg_nr;
+ $$.reg_file = $1.reg.file;
+ $$.reg_nr = $1.reg.nr;
+ $$.subreg_nr = $1.reg.subnr;
if ($2 == DEFAULT_DSTREGION) {
$$.horiz_stride = $1.dst_region;
} else {
@@ -1657,7 +1657,7 @@ symbol_reg_p: STRING LPAREN exp RPAREN
}
memcpy(&$$, dcl_reg, sizeof(*dcl_reg));
- $$.base.reg_nr += $3;
+ $$.reg.nr += $3;
free($1);
}
| STRING LPAREN exp COMMA exp RPAREN
@@ -1670,15 +1670,15 @@ symbol_reg_p: STRING LPAREN exp RPAREN
}
memcpy(&$$, dcl_reg, sizeof(*dcl_reg));
- $$.base.reg_nr += $3;
- $$.base.subreg_nr += $5;
+ $$.reg.nr += $3;
if(advanced_flag) {
- $$.base.reg_nr += $$.base.subreg_nr / (32 / get_type_size(dcl_reg->type));
- $$.base.subreg_nr = $$.base.subreg_nr % (32 / get_type_size(dcl_reg->type));
+ int size = get_type_size(dcl_reg->type);
+ $$.reg.nr += ($$.reg.subnr + $5) / (32 / size);
+ $$.reg.subnr = ($$.reg.subnr + $5) % (32 / size);
} else {
- $$.base.reg_nr += $$.base.subreg_nr / 32;
- $$.base.subreg_nr = $$.base.subreg_nr % 32;
- }
+ $$.reg.nr += ($$.reg.subnr + $5) / 32;
+ $$.reg.subnr = ($$.reg.subnr + $5) % 32;
+ }
free($1);
}
;
@@ -1857,9 +1857,9 @@ srcarchoperandex_typed: flagreg | addrreg | maskreg
sendleadreg: symbol_reg
{
memset (&$$, '\0', sizeof ($$));
- $$.reg_file = $1.base.reg_file;
- $$.reg_nr = $1.base.reg_nr;
- $$.subreg_nr = $1.base.subreg_nr;
+ $$.reg_file = $1.reg.file;
+ $$.reg_nr = $1.reg.nr;
+ $$.subreg_nr = $1.reg.subnr;
}
| directgenreg | directmsgreg
;
@@ -1871,9 +1871,9 @@ directsrcoperand: negate abs symbol_reg region regtype
{
memset (&$$, '\0', sizeof ($$));
$$.address_mode = BRW_ADDRESS_DIRECT;
- $$.reg_file = $3.base.reg_file;
- $$.reg_nr = $3.base.reg_nr;
- $$.subreg_nr = $3.base.subreg_nr;
+ $$.reg_file = $3.reg.file;
+ $$.reg_nr = $3.reg.nr;
+ $$.subreg_nr = $3.reg.subnr;
if ($5.is_default) {
$$.reg_type = $3.type;
} else {
@@ -2303,9 +2303,9 @@ relativelocation2:
{
memset (&$$, '\0', sizeof ($$));
$$.address_mode = BRW_ADDRESS_DIRECT;
- $$.reg_file = $1.base.reg_file;
- $$.reg_nr = $1.base.reg_nr;
- $$.subreg_nr = $1.base.subreg_nr;
+ $$.reg_file = $1.reg.file;
+ $$.reg_nr = $1.reg.nr;
+ $$.subreg_nr = $1.reg.subnr;
$$.reg_type = $1.type;
$$.vert_stride = $1.src_region.vert_stride;
$$.width = $1.src_region.width;