PATTERNS

	STORE4(addr:address, value:reg)
		ins value:GPR
		emit "str %value, %addr"
		cost 4;

	reg = LOAD4(addr:address)
		outs dest:ANY
		emit "ld %dest, %addr"
		cost 4;

	address = ADD4(addr:reg, offset:CONST)
		ins addr:GPR
		fragment "[%addr, #%offset.ivalue]";

	address = addr:reg
		ins addr:GPR
		fragment "[%addr]";

	reg;

	reg = ADD4(left:reg, right:aluparam)
		ins left:GPR, right:GPR
		outs out:GPR
		emit "add %out, %left, %right"
		cost 4;

	reg = ADD4(left:aluparam, right:reg)
		ins left:GPR, right:GPR
		outs out:GPR
		emit "add %out, %right, %left"
		cost 4;

	aluparam = value:CONST4
		when { return false; }
		fragment "#%value.ivalue";

	aluparam = reg;

	reg = value:aluparam
		outs out:GPR
		emit "mov %out, %value"
		cost 4;

	reg = value:LABEL4
		outs out:GPR
		emit "adr %out, #value.lvalue"
		cost 4;

	reg = value:CONST4
		outs out:GPR
		emit "ldr %out, #value.lvalue"
		cost 4;