i965: Add fs_reg/src_reg constructors that take vf[4].
authorMatt Turner <mattst88@gmail.com>
Sat, 20 Dec 2014 19:47:40 +0000 (11:47 -0800)
committerMatt Turner <mattst88@gmail.com>
Mon, 29 Dec 2014 18:05:03 +0000 (10:05 -0800)
Sometimes it's easier to generate 4x values into an array, and the
memcpy is 1 instruction, rather than 11 to piece 4 arguments together.

I'd forgotten to remove the prototype from fs_reg from a previous patch,
so it's already there for us here.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/mesa/drivers/dri/i965/brw_fs.cpp
src/mesa/drivers/dri/i965/brw_vec4.cpp
src/mesa/drivers/dri/i965/brw_vec4.h

index 3639ed28de1f0141cb358b19bc73c502c28bfa4d..2837fc0477d76e01223e4c1ce1b1064f5c66393a 100644 (file)
@@ -584,6 +584,15 @@ fs_reg::fs_reg(uint32_t u)
    this->width = 1;
 }
 
+/** Vector float immediate value constructor. */
+fs_reg::fs_reg(uint8_t vf[4])
+{
+   init();
+   this->file = IMM;
+   this->type = BRW_REGISTER_TYPE_VF;
+   memcpy(&this->fixed_hw_reg.dw1.ud, vf, sizeof(unsigned));
+}
+
 /** Vector float immediate value constructor. */
 fs_reg::fs_reg(uint8_t vf0, uint8_t vf1, uint8_t vf2, uint8_t vf3)
 {
index 2fb578e11f9bce646fb526a63d9c2749a812409c..b303eb68699e328d5dbcab1d23abff5683e6dc16 100644 (file)
@@ -113,6 +113,15 @@ src_reg::src_reg(int32_t i)
    this->fixed_hw_reg.dw1.d = i;
 }
 
+src_reg::src_reg(uint8_t vf[4])
+{
+   init();
+
+   this->file = IMM;
+   this->type = BRW_REGISTER_TYPE_VF;
+   memcpy(&this->fixed_hw_reg.dw1.ud, vf, sizeof(unsigned));
+}
+
 src_reg::src_reg(uint8_t vf0, uint8_t vf1, uint8_t vf2, uint8_t vf3)
 {
    init();
index be52fbc54b97153f88fbef347a4001d7e986b97f..0c44ad3123d324a5a8589a7a99d7b4ba93ece84a 100644 (file)
@@ -82,6 +82,7 @@ public:
    src_reg(float f);
    src_reg(uint32_t u);
    src_reg(int32_t i);
+   src_reg(uint8_t vf[4]);
    src_reg(uint8_t vf0, uint8_t vf1, uint8_t vf2, uint8_t vf3);
    src_reg(struct brw_reg reg);