+ assem_debug("ldur %s,[%s+%#x]\n",regname[rt],regname64[rs],offset);
+ assert(-256 <= offset && offset < 256);
+ output_w32(0xb8400000 | imm9_rn_rt(offset&0x1ff, rs, rt));
+}
+
+static void emit_strb_dualindexed(u_int rs1, u_int rs2, u_int rt)
+{
+ assem_debug("strb %s, [%s,%s]\n",regname[rt],regname64[rs1],regname[rs2]);
+ output_w32(0x38204800 | rm_rn_rd(rs2, rs1, rt));
+}
+
+static void emit_strh_dualindexed(u_int rs1, u_int rs2, u_int rt)
+{
+ assem_debug("strh %s, [%s,%s]\n",regname[rt],regname64[rs1],regname[rs2]);
+ output_w32(0x78204800 | rm_rn_rd(rs2, rs1, rt));
+}
+
+static void emit_str_dualindexed(u_int rs1, u_int rs2, u_int rt)
+{
+ assem_debug("str %s, [%s,%s]\n",regname[rt],regname64[rs1],regname[rs2]);
+ output_w32(0xb8204800 | rm_rn_rd(rs2, rs1, rt));
+}
+
+static void emit_readdword_dualindexedx8(u_int rs1, u_int rs2, u_int rt)
+{
+ assem_debug("ldr %s, [%s,%s, uxtw #3]\n",regname64[rt],regname64[rs1],regname[rs2]);
+ output_w32(0xf8605800 | rm_rn_rd(rs2, rs1, rt));
+}
+
+static void emit_ldrb_dualindexed(u_int rs1, u_int rs2, u_int rt)
+{
+ assem_debug("ldrb %s, [%s,%s]\n",regname[rt],regname64[rs1],regname[rs2]);
+ output_w32(0x38604800 | rm_rn_rd(rs2, rs1, rt));
+}
+
+static void emit_ldrsb_dualindexed(u_int rs1, u_int rs2, u_int rt)
+{
+ assem_debug("ldrsb %s, [%s,%s]\n",regname[rt],regname64[rs1],regname[rs2]);
+ output_w32(0x38a04800 | rm_rn_rd(rs2, rs1, rt));
+}
+
+static void emit_ldrh_dualindexed(u_int rs1, u_int rs2, u_int rt)
+{
+ assem_debug("ldrh %s, [%s,%s, uxtw]\n",regname[rt],regname64[rs1],regname[rs2]);
+ output_w32(0x78604800 | rm_rn_rd(rs2, rs1, rt));
+}
+
+static void emit_ldrsh_dualindexed(u_int rs1, u_int rs2, u_int rt)
+{
+ assem_debug("ldrsh %s, [%s,%s, uxtw]\n",regname[rt],regname64[rs1],regname[rs2]);
+ output_w32(0x78a04800 | rm_rn_rd(rs2, rs1, rt));
+}
+
+static void emit_ldr_dualindexed(u_int rs1, u_int rs2, u_int rt)
+{
+ assem_debug("ldr %s, [%s,%s, uxtw]\n",regname[rt],regname64[rs1],regname[rs2]);
+ output_w32(0xb8604800 | rm_rn_rd(rs2, rs1, rt));