Home | History | Annotate | Download | only in quick

Lines Matching full:loc

678 void Mir2Lir::MarkClean(RegLocation loc) {
679 RegisterInfo* info = GetRegInfo(loc.low_reg);
681 if (loc.wide) {
682 info = GetRegInfo(loc.high_reg);
687 void Mir2Lir::MarkDirty(RegLocation loc) {
688 if (loc.home) {
692 RegisterInfo* info = GetRegInfo(loc.low_reg);
694 if (loc.wide) {
695 info = GetRegInfo(loc.high_reg);
752 RegLocation Mir2Lir::UpdateLoc(RegLocation loc) {
753 DCHECK(!loc.wide);
755 if (loc.location != kLocPhysReg) {
756 DCHECK((loc.location == kLocDalvikFrame) ||
757 (loc.location == kLocCompilerTemp));
758 RegisterInfo* info_lo = AllocLive(loc.s_reg_low, kAnyReg);
765 loc.low_reg = info_lo->reg;
766 loc.location = kLocPhysReg;
771 return loc;
775 RegLocation Mir2Lir::UpdateLocWide(RegLocation loc) {
776 DCHECK(loc.wide);
778 if (loc.location != kLocPhysReg) {
779 DCHECK((loc.location == kLocDalvikFrame) ||
780 (loc.location == kLocCompilerTemp));
782 RegisterInfo* info_lo = AllocLive(loc.s_reg_low, kAnyReg);
783 RegisterInfo* info_hi = AllocLive(GetSRegHi(loc.s_reg_low), kAnyReg);
802 loc.low_reg = info_lo->reg;
803 loc.high_reg = info_hi->reg;
804 loc.location = kLocPhysReg;
805 MarkPair(loc.low_reg, loc.high_reg);
806 DCHECK(!IsFpReg(loc.low_reg) || ((loc.low_reg & 0x1) == 0));
807 return loc;
823 return loc;
828 RegLocation Mir2Lir::UpdateRawLoc(RegLocation loc) {
829 if (loc.wide)
830 return UpdateLocWide(loc);
832 return UpdateLoc(loc);
835 RegLocation Mir2Lir::EvalLocWide(RegLocation loc, int reg_class, bool update) {
836 DCHECK(loc.wide);
841 loc = UpdateLocWide(loc);
844 if (loc.location == kLocPhysReg) {
845 DCHECK_EQ(IsFpReg(loc.low_reg), IsFpReg(loc.high_reg));
846 DCHECK(!IsFpReg(loc.low_reg) || ((loc.low_reg & 0x1) == 0));
847 if (!RegClassMatches(reg_class, loc.low_reg)) {
849 new_regs = AllocTypedTempPair(loc.fp, reg_class);
852 OpRegCopyWide(low_reg, high_reg, loc.low_reg, loc.high_reg);
853 CopyRegInfo(low_reg, loc.low_reg);
854 CopyRegInfo(high_reg, loc.high_reg);
855 Clobber(loc.low_reg);
856 Clobber(loc.high_reg);
857 loc.low_reg = low_reg;
858 loc.high_reg = high_reg;
859 MarkPair(loc.low_reg, loc.high_reg);
860 DCHECK(!IsFpReg(loc.low_reg) || ((loc.low_reg & 0x1) == 0));
862 return loc;
865 DCHECK_NE(loc.s_reg_low, INVALID_SREG);
866 DCHECK_NE(GetSRegHi(loc.s_reg_low), INVALID_SREG);
868 new_regs = AllocTypedTempPair(loc.fp, reg_class);
869 loc.low_reg = new_regs & 0xff;
870 loc.high_reg = (new_regs >> 8) & 0xff;
872 MarkPair(loc.low_reg, loc.high_reg);
874 loc.location = kLocPhysReg;
875 MarkLive(loc.low_reg, loc.s_reg_low);
876 MarkLive(loc.high_reg, GetSRegHi(loc.s_reg_low));
878 DCHECK(!IsFpReg(loc.low_reg) || ((loc.low_reg & 0x1) == 0));
879 return loc;
882 RegLocation Mir2Lir::EvalLoc(RegLocation loc, int reg_class, bool update) {
885 if (loc.wide)
886 return EvalLocWide(loc, reg_class, update);
888 loc = UpdateLoc(loc);
890 if (loc.location == kLocPhysReg) {
891 if (!RegClassMatches(reg_class, loc.low_reg)) {
893 new_reg = AllocTypedTemp(loc.fp, reg_class);
894 OpRegCopy(new_reg, loc.low_reg);
895 CopyRegInfo(new_reg, loc.low_reg);
896 Clobber(loc.low_reg);
897 loc.low_reg = new_reg;
899 return loc;
902 DCHECK_NE(loc.s_reg_low, INVALID_SREG);
904 new_reg = AllocTypedTemp(loc.fp, reg_class);
905 loc.low_reg = new_reg;
908 loc.location = kLocPhysReg;
909 MarkLive(loc.low_reg, loc.s_reg_low);
911 return loc;
917 RegLocation loc = mir_graph_->reg_location_[i];
918 RefCounts* counts = loc.fp ? fp_counts : core_counts;
919 int p_map_idx = SRegToPMap(loc.s_reg_low);
921 if (loc.fp || !IsInexpensiveConstant(loc)) {
924 if (loc.wide && loc.fp && !loc.high_word) {