changeset c33d3607683c in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=c33d3607683c
description:
        hsail: add a wavesize case statement to register operand code

diffstat:

 src/arch/hsail/operand.cc |  68 ++++++++++++++++++++++++++--------------------
 1 files changed, 38 insertions(+), 30 deletions(-)

diffs (85 lines):

diff -r 4e208a5350b8 -r c33d3607683c src/arch/hsail/operand.cc
--- a/src/arch/hsail/operand.cc Fri Dec 02 18:01:49 2016 -0500
+++ b/src/arch/hsail/operand.cc Fri Dec 02 18:01:52 2016 -0500
@@ -224,43 +224,51 @@
         }
         break;
 
+      case BRIG_KIND_OPERAND_WAVESIZE:
+        {
+            BrigRegisterKind reg_kind = BRIG_REGISTER_KIND_DOUBLE;
+            return BrigRegOperandInfo((BrigKind16_t)baseOp->kind, reg_kind);
+        }
+
       case BRIG_KIND_OPERAND_OPERAND_LIST:
         {
-             const BrigOperandOperandList *op =
-                (BrigOperandOperandList*)baseOp;
-             const BrigData *data_p = (BrigData*)obj->getData(op->elements);
+            const BrigOperandOperandList *op =
+               (BrigOperandOperandList*)baseOp;
+            const BrigData *data_p = (BrigData*)obj->getData(op->elements);
 
 
-             int num_operands = 0;
-             BrigRegisterKind reg_kind = (BrigRegisterKind)0;
-             for (int offset = 0; offset < data_p->byteCount; offset += 4) {
-                 const BrigOperand *op_p = (const BrigOperand *)
-                    obj->getOperand(((int *)data_p->bytes)[offset/4]);
+            int num_operands = 0;
+            BrigRegisterKind reg_kind = (BrigRegisterKind)0;
+            for (int offset = 0; offset < data_p->byteCount; offset += 4) {
+                const BrigOperand *op_p = (const BrigOperand *)
+                   obj->getOperand(((int *)data_p->bytes)[offset/4]);
 
-                 if (op_p->kind == BRIG_KIND_OPERAND_REGISTER) {
-                     const BrigOperandRegister *brigRegOp =
-                        (const BrigOperandRegister*)op_p;
-                     reg_kind = (BrigRegisterKind)brigRegOp->regKind;
-                 } else if (op_p->kind == BRIG_KIND_OPERAND_CONSTANT_BYTES) {
-                     uint16_t num_bytes =
-                        ((Brig::BrigOperandConstantBytes*)op_p)->base.byteCount
-                            - sizeof(BrigBase);
-                     if (num_bytes == sizeof(uint32_t)) {
-                         reg_kind = BRIG_REGISTER_KIND_SINGLE;
-                     } else if (num_bytes == sizeof(uint64_t)) {
-                         reg_kind = BRIG_REGISTER_KIND_DOUBLE;
-                     } else {
-                         fatal("OperandList: bad operand size %d\n", 
num_bytes);
-                     }
-                 } else {
-                     fatal("OperandList: bad operand kind %d\n", op_p->kind);
-                 }
+                if (op_p->kind == BRIG_KIND_OPERAND_REGISTER) {
+                    const BrigOperandRegister *brigRegOp =
+                       (const BrigOperandRegister*)op_p;
+                    reg_kind = (BrigRegisterKind)brigRegOp->regKind;
+                } else if (op_p->kind == BRIG_KIND_OPERAND_CONSTANT_BYTES) {
+                    uint16_t num_bytes =
+                       ((Brig::BrigOperandConstantBytes*)op_p)->base.byteCount
+                           - sizeof(BrigBase);
+                    if (num_bytes == sizeof(uint32_t)) {
+                        reg_kind = BRIG_REGISTER_KIND_SINGLE;
+                    } else if (num_bytes == sizeof(uint64_t)) {
+                        reg_kind = BRIG_REGISTER_KIND_DOUBLE;
+                    } else {
+                        fatal("OperandList: bad operand size %d\n", num_bytes);
+                    }
+                } else if (op_p->kind == BRIG_KIND_OPERAND_WAVESIZE) {
+                    reg_kind = BRIG_REGISTER_KIND_DOUBLE;
+                } else {
+                    fatal("OperandList: bad operand kind %d\n", op_p->kind);
+                }
 
-                 num_operands++;
-             }
-             assert(baseOp->kind == BRIG_KIND_OPERAND_OPERAND_LIST);
+                num_operands++;
+            }
+            assert(baseOp->kind == BRIG_KIND_OPERAND_OPERAND_LIST);
 
-             return BrigRegOperandInfo((BrigKind16_t)baseOp->kind, reg_kind);
+            return BrigRegOperandInfo((BrigKind16_t)baseOp->kind, reg_kind);
         }
         break;
 
_______________________________________________
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to