Revision 51996525 target-sparc/op_helper.c

b/target-sparc/op_helper.c
862 862
    case 0x19: // As if user secondary LE
863 863
    case 0x1c: // Bypass LE
864 864
    case 0x1d: // Bypass, non-cacheable LE
865
    case 0x81: // Secondary
866 865
    case 0x88: // Primary LE
867 866
    case 0x89: // Secondary LE
868 867
        switch(size) {
......
950 949
    case 0x24: // Nucleus quad LDD 128 bit atomic
951 950
    case 0x2c: // Nucleus quad LDD 128 bit atomic
952 951
    case 0x4a: // UPA config
952
    case 0x81: // Secondary
953 953
    case 0x89: // Secondary LE
954 954
        // XXX
955 955
        return;
......
1137 1137
    case 0xf1: // Block load secondary
1138 1138
    case 0xf8: // Block load primary LE
1139 1139
    case 0xf9: // Block load secondary LE
1140
        for (i = 0; i < 8; i++) {
1141
            helper_ld_asi(asi & 0x8f, 8, 0);
1142
            *((int64_t *)&DT0) = T1;
1143
            T0 += 8;
1140
        if (rd & 7) {
1141
            raise_exception(TT_ILL_INSN);
1142
            return;
1143
        }
1144
        if (T0 & 0x3f) {
1145
            raise_exception(TT_UNALIGNED);
1146
            return;
1147
        }
1148
        for (i = 0; i < 16; i++) {
1149
            helper_ld_asi(asi & 0x8f, 4, 0);
1150
            *(uint32_t *)&env->fpr[rd++] = T1;
1151
            T0 += 4;
1144 1152
        }
1145 1153
        T0 = tmp_T0;
1146 1154
        T1 = tmp_T1;
......
1173 1181
    case 0xf1: // Block store secondary
1174 1182
    case 0xf8: // Block store primary LE
1175 1183
    case 0xf9: // Block store secondary LE
1176
        for (i = 0; i < 8; i++) {
1177
            T1 = *((int64_t *)&DT0);
1178
            helper_st_asi(asi & 0x8f, 8);
1179
            T0 += 8;
1184
        if (rd & 7) {
1185
            raise_exception(TT_ILL_INSN);
1186
            return;
1187
        }
1188
        if (T0 & 0x3f) {
1189
            raise_exception(TT_UNALIGNED);
1190
            return;
1191
        }
1192
        for (i = 0; i < 16; i++) {
1193
            T1 = *(uint32_t *)&env->fpr[rd++];
1194
            helper_st_asi(asi & 0x8f, 4);
1195
            T0 += 4;
1180 1196
        }
1181 1197
        T0 = tmp_T0;
1182 1198
        T1 = tmp_T1;

Also available in: Unified diff