i965: Create a "brw_last_inst" convenience macro.
authorKenneth Graunke <kenneth@whitecape.org>
Wed, 28 May 2014 06:27:01 +0000 (23:27 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 2 Jun 2014 22:09:23 +0000 (15:09 -0700)
Often times, we want to emit an instruction, then set one field on it,
such as predication or a conditional modifier.  Normally, we'd have to
declare "struct brw_instruction *inst;" and then use "inst =
brw_FOO(...)" to emit the instruction, which can hurt readability.

The new "brw_last_inst" macro refers to the most recently emitted
instruction, so you can just do:

    brw_ADD(...)
    brw_last_inst->header.predicate_control = BRW_PREDICATE_NORMAL;

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
src/mesa/drivers/dri/i965/brw_eu.h

index baa135ba0f84fe115dfc4e40f7b0dadca00f8d76..9b36e05cb73479331967cc2e575e103fc1620035 100644 (file)
@@ -46,6 +46,12 @@ extern "C" {
 
 #define BRW_EU_MAX_INSN_STACK 5
 
+/* A helper for accessing the last instruction emitted.  This makes it easy
+ * to set various bits on an instruction without having to create temporary
+ * variable and assign the emitted instruction to those.
+ */
+#define brw_last_inst (&p->store[p->nr_insn - 1])
+
 struct brw_compile {
    struct brw_instruction *store;
    int store_size;