Revision 59795a1f target-i386/helper.c

b/target-i386/helper.c
337 337
            } else if (!strcmp(featurestr, "model")) {
338 338
                char *err;
339 339
                model = strtol(val, &err, 10);
340
                if (!*val || *err || model < 0 || model > 0xf) {
340
                if (!*val || *err || model < 0 || model > 0xff) {
341 341
                    fprintf(stderr, "bad numerical value %s\n", val);
342 342
                    goto error;
343 343
                }
......
416 416
        env->cpuid_vendor3 = CPUID_VENDOR_INTEL_3;
417 417
    }
418 418
    env->cpuid_level = def->level;
419
    env->cpuid_version = (def->family << 8) | (def->model << 4) | def->stepping;
419
    if (def->family > 0x0f)
420
        env->cpuid_version = 0xf00 | ((def->family - 0x0f) << 20);
421
    else
422
        env->cpuid_version = def->family << 8;
423
    env->cpuid_version |= ((def->model & 0xf) << 4) | ((def->model >> 4) << 16);
424
    env->cpuid_version |= def->stepping;
420 425
    env->cpuid_features = def->features;
421 426
    env->pat = 0x0007040600070406ULL;
422 427
    env->cpuid_ext_features = def->ext_features;

Also available in: Unified diff