public void executeLdrt(InstructionARM inst, boolean exec) {
        int rn = inst.getRnField();
        int rd = inst.getRdField();
        int offset = getAddrMode2(inst);
        int vaddr, paddr, rot, value;

        if (!exec) {
            printDisasm(inst,
                    String.format("ldrt%s", inst.getCondFieldName()),
                    String.format("%s, %s", getRegName(rd),
                            getAddrMode2Name(inst)));
            return;
        }

        if (!inst.satisfiesCond(getCPSR())) {
            return;
        }

        //P ビットは必ず 0、ポストインデクス
        vaddr = getReg(rn);

        rot = vaddr & 0x3;

        paddr = getMMU().translate(vaddr, 4, false, false, true);
        if (getMMU().isFault()) {
            getMMU().clearFault();
            return;
        }

        if (!tryRead_a32(paddr, 4)) {
            raiseException(ARMv5.EXCEPT_ABT_DATA,
                    String.format("ldrt [%08x]", paddr));
            return;
        }
        value = read32_a32(paddr);

        switch (rot) {
        case 0:
            //do nothing
            break;
        case 1:
            value = Integer.rotateRight(value, 8);
            break;
        case 2:
            value = Integer.rotateRight(value, 16);
            break;
        case 3:
            value = Integer.rotateRight(value, 24);
            break;
        default:
            throw new IllegalArgumentException("Illegal address " +
                    String.format("inst:0x%08x, rot:%d.",
                            inst.getInst(), rot));
        }

        if (rd == 15) {
            setPC(value & 0xfffffffe);
            getCPSR().setTBit(BitOp.getBit32(value, 0));
        } else {
            setReg(rd, value);
        }

        //P ビットは必ず 0、W ビットは必ず 1、ベースレジスタを更新する
        setReg(rn, offset);
    }