Author: Armin Rigo <[email protected]>
Branch: c7
Changeset: r600:66e0f7f7267c
Date: 2014-01-04 16:54 +0100
http://bitbucket.org/pypy/stmgc/changeset/66e0f7f7267c/
Log: Check both the x86 version and the general version.
diff --git a/checkfence/c7/unshare_page.c b/checkfence/c7/unshare_page.c
--- a/checkfence/c7/unshare_page.c
+++ b/checkfence/c7/unshare_page.c
@@ -20,38 +20,51 @@
flag_page_private = SHARED_PAGE;
}
-void _stm_privatize(void)
+void _stm_privatize(int mode)
{
- int previous = __sync_lock_test_and_set(&flag_page_private,
- REMAPPING_PAGE);
- switch (previous) {
- case PRIVATE_PAGE:
- lsl_assert(flag_page_private != SHARED_PAGE);
- flag_page_private = PRIVATE_PAGE;
- return;
+ int was_shared;
+ if (mode == 0) {
+ int previous = __sync_lock_test_and_set(&flag_page_private,
+ REMAPPING_PAGE);
+ if (previous == PRIVATE_PAGE) {
+ lsl_assert(flag_page_private != SHARED_PAGE);
+ flag_page_private = PRIVATE_PAGE;
+ return;
+ }
+ was_shared = (previous == SHARED_PAGE);
+ }
+ else {
+ was_shared = lsl_cas_32(&flag_page_private,
+ SHARED_PAGE, REMAPPING_PAGE);
+ lsl_fence("load-load");
+ }
- case REMAPPING_PAGE:
+ if (!was_shared) {
lsl_assert(flag_page_private != SHARED_PAGE);
/* here we wait until 'flag_page_private' is changed away from
REMAPPING_PAGE, and we assume that it eventually occurs */
lsl_assume(flag_page_private != REMAPPING_PAGE);
lsl_fence("load-load");
- return;
-
- case SHARED_PAGE:
+ }
+ else {
lsl_observe_label("privatizing");
privatized_data = 42;
lsl_fence("store-store");
lsl_assert(flag_page_private == REMAPPING_PAGE);
flag_page_private = PRIVATE_PAGE;
- return;
}
- lsl_assert(0);
}
-void PRIVATIZE(void)
+void PRIV_X86(void)
{
- _stm_privatize();
+ _stm_privatize(0);
int data = privatized_data;
lsl_observe_output("data", data);
}
+
+void PRIV_GEN(void)
+{
+ _stm_privatize(1);
+ int data = privatized_data;
+ lsl_observe_output("data", data);
+}
diff --git a/checkfence/c7/unshare_page.lsl b/checkfence/c7/unshare_page.lsl
--- a/checkfence/c7/unshare_page.lsl
+++ b/checkfence/c7/unshare_page.lsl
@@ -1,2 +1,3 @@
-test T1 = INIT ( PRIVATIZE PRIVATIZE | PRIVATIZE PRIVATIZE | PRIVATIZE
PRIVATIZE )
+test T1 = INIT ( PRIV_X86 PRIV_X86 | PRIV_X86 PRIV_X86 | PRIV_X86 PRIV_X86 )
+test T2 = INIT ( PRIV_GEN PRIV_GEN | PRIV_GEN PRIV_GEN | PRIV_GEN PRIV_GEN )
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit