1547 /** 1548 * Generates an address of the form {@code base + displacement}. 1549 * 1550 * Does not change base register to fulfill this requirement. Will fail if displacement cannot 1551 * be represented directly as address. 1552 * 1553 * @param base general purpose register. May not be null or the zero register. 1554 * @param displacement arbitrary displacement added to base. 1555 * @return AArch64Address referencing memory at {@code base + displacement}. 1556 */ 1557 @Override 1558 public AArch64Address makeAddress(Register base, int displacement) { 1559 return makeAddress(base, displacement, zr, /* signExtend */false, /* transferSize */0, zr, /* allowOverwrite */false); 1560 } 1561 1562 @Override 1563 public AbstractAddress getPlaceholder(int instructionStartPosition) { 1564 return AArch64Address.PLACEHOLDER; 1565 } 1566 1567 /** 1568 * Loads an address into Register d. 1569 * 1570 * @param d general purpose register. May not be null. 1571 * @param a AArch64Address the address of an operand. 1572 */ 1573 public void lea(Register d, AArch64Address a) { 1574 a.lea(this, d); 1575 } 1576 } | 1547 /** 1548 * Generates an address of the form {@code base + displacement}. 1549 * 1550 * Does not change base register to fulfill this requirement. Will fail if displacement cannot 1551 * be represented directly as address. 1552 * 1553 * @param base general purpose register. May not be null or the zero register. 1554 * @param displacement arbitrary displacement added to base. 1555 * @return AArch64Address referencing memory at {@code base + displacement}. 1556 */ 1557 @Override 1558 public AArch64Address makeAddress(Register base, int displacement) { 1559 return makeAddress(base, displacement, zr, /* signExtend */false, /* transferSize */0, zr, /* allowOverwrite */false); 1560 } 1561 1562 @Override 1563 public AbstractAddress getPlaceholder(int instructionStartPosition) { 1564 return AArch64Address.PLACEHOLDER; 1565 } 1566 1567 public void addressOf(Register dst) { 1568 // This will be fixed up later. 1569 super.adrp(dst); 1570 super.add(64, dst, dst, 0); 1571 } 1572 1573 /** 1574 * Loads an address into Register d. 1575 * 1576 * @param d general purpose register. May not be null. 1577 * @param a AArch64Address the address of an operand. 1578 */ 1579 public void lea(Register d, AArch64Address a) { 1580 a.lea(this, d); 1581 } 1582 } |