On Sun, Dec 09, 2007 at 11:36:34AM +0000, Paul Brook wrote: > > + x86_cpu_def->vendor1 = cpu_to_le32(*(uint32_t *)val); > > + x86_cpu_def->vendor2 = cpu_to_le32(*(uint32_t *)(val + > > 4)); + x86_cpu_def->vendor3 = cpu_to_le32(*(uint32_t *)(val > > Still not good enough. val might not be aligned. >
So, is it that my only hope is going back to basics? diff --git a/target-i386/helper2.c b/target-i386/helper2.c index 67658e2..2ef4be3 100644 --- a/target-i386/helper2.c +++ b/target-i386/helper2.c @@ -254,6 +254,18 @@ static int cpu_x86_find_by_name(x86_def_t *x86_cpu_def, const char *cpu_model) goto error; } x86_cpu_def->stepping = stepping; + } else if (!strcmp(featurestr, "vendor")) { + if (strlen(val) != 12) { + fprintf(stderr, "vendor string must be 12 chars long\n"); + x86_cpu_def = 0; + goto error; + } + x86_cpu_def->vendor1 = val[0] + (val[1] << 8) + + (val[2] << 16) + (val[3] << 24); + x86_cpu_def->vendor2 = val[4] + (val[5] << 8) + + (val[6] << 16) + (val[7] << 24); + x86_cpu_def->vendor3 = val[8] + (val[9] << 8) + + (val[10] << 16) + (val[11] << 24); } else { fprintf(stderr, "unrecognized feature %s\n", featurestr); x86_cpu_def = 0;