@@ -30,6 +30,7 @@ void RegistersView::InitMappings()
30
30
// create mapping from internal id to name
31
31
mRegisterMapping .clear ();
32
32
mRegisterPlaces .clear ();
33
+ mRegisterRelativePlaces .clear ();
33
34
int offset = 0 ;
34
35
35
36
/* Register_Position is a struct definition the position
@@ -155,26 +156,51 @@ void RegistersView::InitMappings()
155
156
156
157
mRegisterMapping .insert (LastError, " LastError" );
157
158
mRegisterPlaces .insert (LastError, Register_Position (offset++, 0 , 11 , 20 ));
159
+ mRegisterRelativePlaces .insert (LastError, Register_Relative_Position (IF, LastStatus));
158
160
mMODIFYDISPLAY .insert (LastError);
159
161
mRegisterMapping .insert (LastStatus, " LastStatus" );
160
162
mRegisterPlaces .insert (LastStatus, Register_Position (offset++, 0 , 11 , 20 ));
163
+ mRegisterRelativePlaces .insert (LastStatus, Register_Relative_Position (LastError, GS));
161
164
mMODIFYDISPLAY .insert (LastStatus);
162
165
163
166
offset++;
164
167
165
168
mRegisterMapping .insert (GS, " GS" );
166
169
mRegisterPlaces .insert (GS, Register_Position (offset, 0 , 3 , 4 ));
170
+ mRegisterRelativePlaces .insert (GS, Register_Relative_Position (LastStatus, FS, LastStatus, ES));
167
171
mRegisterMapping .insert (FS, " FS" );
168
172
mRegisterPlaces .insert (FS, Register_Position (offset++, 9 , 3 , 4 ));
173
+ mRegisterRelativePlaces .insert (FS, Register_Relative_Position (GS, ES, LastStatus, DS));
169
174
mRegisterMapping .insert (ES, " ES" );
170
175
mRegisterPlaces .insert (ES, Register_Position (offset, 0 , 3 , 4 ));
176
+ mRegisterRelativePlaces .insert (ES, Register_Relative_Position (FS, DS, GS, CS));
171
177
mRegisterMapping .insert (DS, " DS" );
172
178
mRegisterPlaces .insert (DS, Register_Position (offset++, 9 , 3 , 4 ));
179
+ mRegisterRelativePlaces .insert (DS, Register_Relative_Position (ES, CS, FS, SS));
173
180
mRegisterMapping .insert (CS, " CS" );
174
181
mRegisterPlaces .insert (CS, Register_Position (offset, 0 , 3 , 4 ));
175
182
mRegisterMapping .insert (SS, " SS" );
176
183
mRegisterPlaces .insert (SS, Register_Position (offset++, 9 , 3 , 4 ));
177
184
185
+ if (mShowFpu )
186
+ {
187
+ if (mFpuMode )
188
+ {
189
+ mRegisterRelativePlaces .insert (CS, Register_Relative_Position (DS, SS, ES, x87r0));
190
+ mRegisterRelativePlaces .insert (SS, Register_Relative_Position (CS, x87r0, DS, x87r0));
191
+ }
192
+ else
193
+ {
194
+ mRegisterRelativePlaces .insert (CS, Register_Relative_Position (DS, SS, ES, x87st0));
195
+ mRegisterRelativePlaces .insert (SS, Register_Relative_Position (CS, x87st0, DS, x87st0));
196
+ }
197
+ }
198
+ else
199
+ {
200
+ mRegisterRelativePlaces .insert (CS, Register_Relative_Position (DS, SS, ES, DR0));
201
+ mRegisterRelativePlaces .insert (SS, Register_Relative_Position (CS, DR0, DS, DR0));
202
+ }
203
+
178
204
if (mShowFpu )
179
205
{
180
206
offset++;
@@ -455,18 +481,36 @@ void RegistersView::InitMappings()
455
481
456
482
offset++;
457
483
484
+ if (mShowFpu )
485
+ {
486
+ #ifdef _WIN64
487
+ mRegisterRelativePlaces .insert (DR0, Register_Relative_Position (YMM15, DR1));
488
+ #else
489
+ mRegisterRelativePlaces .insert (DR0, Register_Relative_Position (YMM7, DR1));
490
+ #endif
491
+ }
492
+ else
493
+ {
494
+ mRegisterRelativePlaces .insert (DR0, Register_Relative_Position (SS, DR1));
495
+ }
496
+
458
497
mRegisterMapping .insert (DR0, " DR0" );
459
498
mRegisterPlaces .insert (DR0, Register_Position (offset++, 0 , 4 , sizeof (duint) * 2 ));
460
499
mRegisterMapping .insert (DR1, " DR1" );
461
500
mRegisterPlaces .insert (DR1, Register_Position (offset++, 0 , 4 , sizeof (duint) * 2 ));
501
+ mRegisterRelativePlaces .insert (DR1, Register_Relative_Position (DR0, DR2));
462
502
mRegisterMapping .insert (DR2, " DR2" );
463
503
mRegisterPlaces .insert (DR2, Register_Position (offset++, 0 , 4 , sizeof (duint) * 2 ));
504
+ mRegisterRelativePlaces .insert (DR2, Register_Relative_Position (DR1, DR3));
464
505
mRegisterMapping .insert (DR3, " DR3" );
465
506
mRegisterPlaces .insert (DR3, Register_Position (offset++, 0 , 4 , sizeof (duint) * 2 ));
507
+ mRegisterRelativePlaces .insert (DR3, Register_Relative_Position (DR2, DR6));
466
508
mRegisterMapping .insert (DR6, " DR6" );
467
509
mRegisterPlaces .insert (DR6, Register_Position (offset++, 0 , 4 , sizeof (duint) * 2 ));
510
+ mRegisterRelativePlaces .insert (DR6, Register_Relative_Position (DR3, DR7));
468
511
mRegisterMapping .insert (DR7, " DR7" );
469
512
mRegisterPlaces .insert (DR7, Register_Position (offset++, 0 , 4 , sizeof (duint) * 2 ));
513
+ mRegisterRelativePlaces .insert (DR7, Register_Relative_Position (DR6, UNKNOWN));
470
514
471
515
mRowsNeeded = offset + 1 ;
472
516
}
0 commit comments