|
From: <sv...@va...> - 2005-10-22 12:46:19
|
Author: sewardj
Date: 2005-10-22 13:46:06 +0100 (Sat, 22 Oct 2005)
New Revision: 1423
Log:
Remove inefficient and not-completely-general logic in addHRegUse and
replace with something general and simpler.
Modified:
trunk/priv/host-generic/h_generic_regs.c
Modified: trunk/priv/host-generic/h_generic_regs.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/host-generic/h_generic_regs.c 2005-10-22 02:01:16 UTC (rev=
1422)
+++ trunk/priv/host-generic/h_generic_regs.c 2005-10-22 12:46:06 UTC (rev=
1423)
@@ -122,15 +122,21 @@
tab->n_used++;
} else {
/* Found: combine or ignore. */
- if (tab->mode[i] =3D=3D mode)
- return; /* duplicate, ignore */
- if (mode =3D=3D HRmModify) {
+ /* This is a greatest-lower-bound operation in the poset:
+
+ R W
+ \ /
+ M
+
+ Need to do: tab->mode[i] =3D GLB(tab->mode, mode). In this
+ case very simple -- if tab->mode[i] !=3D mode then result must
+ be M.
+ */
+ if (tab->mode[i] =3D=3D mode) {
+ /* duplicate, ignore */
+ } else {
tab->mode[i] =3D HRmModify;
- return; /* modify mode makes previous mode irrelevant */
}
- vassert( (mode =3D=3D HRmRead && tab->mode[i] =3D=3D HRmWrite)
- || (mode =3D=3D HRmWrite && tab->mode[i] =3D=3D HRmRead) )=
;
- tab->mode[i] =3D HRmModify;
}
}
=20
|