2010-09-06 00:39:45 -04:00
|
|
|
USING: compiler.cfg.instructions compiler.cfg.write-barrier
|
|
|
|
|
tools.test ;
|
|
|
|
|
IN: compiler.cfg.write-barrier.tests
|
|
|
|
|
|
|
|
|
|
! Do need a write barrier on a random store.
|
2015-07-03 12:39:59 -04:00
|
|
|
{
|
2010-09-06 00:39:45 -04:00
|
|
|
V{
|
2018-08-10 14:04:49 -04:00
|
|
|
T{ peek## f 1 }
|
|
|
|
|
T{ set-slot## f 2 1 3 }
|
|
|
|
|
T{ write-barrier## f 1 3 }
|
2010-09-06 00:39:45 -04:00
|
|
|
}
|
2015-07-03 12:39:59 -04:00
|
|
|
} [
|
2010-09-06 00:39:45 -04:00
|
|
|
V{
|
2018-08-10 14:04:49 -04:00
|
|
|
T{ peek## f 1 }
|
|
|
|
|
T{ set-slot## f 2 1 3 }
|
|
|
|
|
T{ write-barrier## f 1 3 }
|
2010-09-06 00:39:45 -04:00
|
|
|
} write-barriers-step
|
|
|
|
|
] unit-test
|
|
|
|
|
|
2015-07-03 12:39:59 -04:00
|
|
|
{
|
2010-09-06 00:39:45 -04:00
|
|
|
V{
|
2018-08-10 14:04:49 -04:00
|
|
|
T{ peek## f 1 }
|
|
|
|
|
T{ set-slot-imm## f 2 1 }
|
|
|
|
|
T{ write-barrier-imm## f 1 }
|
2010-09-06 00:39:45 -04:00
|
|
|
}
|
2015-07-03 12:39:59 -04:00
|
|
|
} [
|
2010-09-06 00:39:45 -04:00
|
|
|
V{
|
2018-08-10 14:04:49 -04:00
|
|
|
T{ peek## f 1 }
|
|
|
|
|
T{ set-slot-imm## f 2 1 }
|
|
|
|
|
T{ write-barrier-imm## f 1 }
|
2010-09-06 00:39:45 -04:00
|
|
|
} write-barriers-step
|
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
|
|
! Don't need a write barrier on freshly allocated objects.
|
2015-07-03 12:39:59 -04:00
|
|
|
{
|
2010-09-06 00:39:45 -04:00
|
|
|
V{
|
2018-08-10 14:04:49 -04:00
|
|
|
T{ allot## f 1 }
|
|
|
|
|
T{ set-slot## f 2 1 3 }
|
2010-09-06 00:39:45 -04:00
|
|
|
}
|
2015-07-03 12:39:59 -04:00
|
|
|
} [
|
2010-09-06 00:39:45 -04:00
|
|
|
V{
|
2018-08-10 14:04:49 -04:00
|
|
|
T{ allot## f 1 }
|
|
|
|
|
T{ set-slot## f 2 1 3 }
|
|
|
|
|
T{ write-barrier## f 1 3 }
|
2010-09-06 00:39:45 -04:00
|
|
|
} write-barriers-step
|
|
|
|
|
] unit-test
|
|
|
|
|
|
2015-07-03 12:39:59 -04:00
|
|
|
{
|
2010-09-06 00:39:45 -04:00
|
|
|
V{
|
2018-08-10 14:04:49 -04:00
|
|
|
T{ allot## f 1 }
|
|
|
|
|
T{ set-slot-imm## f 2 1 }
|
2010-09-06 00:39:45 -04:00
|
|
|
}
|
2015-07-03 12:39:59 -04:00
|
|
|
} [
|
2010-09-06 00:39:45 -04:00
|
|
|
V{
|
2018-08-10 14:04:49 -04:00
|
|
|
T{ allot## f 1 }
|
|
|
|
|
T{ set-slot-imm## f 2 1 }
|
|
|
|
|
T{ write-barrier-imm## f 1 }
|
2010-09-06 00:39:45 -04:00
|
|
|
} write-barriers-step
|
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
|
|
! Do need a write barrier if there's a subroutine call between
|
|
|
|
|
! the allocation and the store.
|
2015-07-03 12:39:59 -04:00
|
|
|
{
|
2010-09-06 00:39:45 -04:00
|
|
|
V{
|
2018-08-10 14:04:49 -04:00
|
|
|
T{ allot## f 1 }
|
|
|
|
|
T{ box## }
|
|
|
|
|
T{ set-slot## f 2 1 3 }
|
|
|
|
|
T{ write-barrier## f 1 3 }
|
2010-09-06 00:39:45 -04:00
|
|
|
}
|
2015-07-03 12:39:59 -04:00
|
|
|
} [
|
2010-09-06 00:39:45 -04:00
|
|
|
V{
|
2018-08-10 14:04:49 -04:00
|
|
|
T{ allot## f 1 }
|
|
|
|
|
T{ box## }
|
|
|
|
|
T{ set-slot## f 2 1 3 }
|
|
|
|
|
T{ write-barrier## f 1 3 }
|
2010-09-06 00:39:45 -04:00
|
|
|
} write-barriers-step
|
|
|
|
|
] unit-test
|
|
|
|
|
|
2015-07-03 12:39:59 -04:00
|
|
|
{
|
2010-09-06 00:39:45 -04:00
|
|
|
V{
|
2018-08-10 14:04:49 -04:00
|
|
|
T{ allot## f 1 }
|
|
|
|
|
T{ box## }
|
|
|
|
|
T{ set-slot-imm## f 2 1 }
|
|
|
|
|
T{ write-barrier-imm## f 1 }
|
2010-09-06 00:39:45 -04:00
|
|
|
}
|
2015-07-03 12:39:59 -04:00
|
|
|
} [
|
2010-09-06 00:39:45 -04:00
|
|
|
V{
|
2018-08-10 14:04:49 -04:00
|
|
|
T{ allot## f 1 }
|
|
|
|
|
T{ box## }
|
|
|
|
|
T{ set-slot-imm## f 2 1 }
|
|
|
|
|
T{ write-barrier-imm## f 1 }
|
2010-09-06 00:39:45 -04:00
|
|
|
} write-barriers-step
|
|
|
|
|
] unit-test
|
2010-09-06 20:01:44 -04:00
|
|
|
|
2018-08-10 14:04:49 -04:00
|
|
|
! copy## instructions
|
2015-07-03 12:39:59 -04:00
|
|
|
{
|
2010-09-06 20:01:44 -04:00
|
|
|
V{
|
2018-08-10 14:04:49 -04:00
|
|
|
T{ copy## f 2 1 }
|
|
|
|
|
T{ set-slot-imm## f 3 1 }
|
|
|
|
|
T{ write-barrier-imm## f 2 }
|
2010-09-06 20:01:44 -04:00
|
|
|
}
|
2015-07-03 12:39:59 -04:00
|
|
|
} [
|
2010-09-06 20:01:44 -04:00
|
|
|
V{
|
2018-08-10 14:04:49 -04:00
|
|
|
T{ copy## f 2 1 }
|
|
|
|
|
T{ set-slot-imm## f 3 1 }
|
|
|
|
|
T{ write-barrier-imm## f 2 }
|
2010-09-06 20:01:44 -04:00
|
|
|
} write-barriers-step
|
|
|
|
|
] unit-test
|
|
|
|
|
|
2015-07-03 12:39:59 -04:00
|
|
|
{
|
2010-09-06 20:01:44 -04:00
|
|
|
V{
|
2018-08-10 14:04:49 -04:00
|
|
|
T{ copy## f 2 1 }
|
|
|
|
|
T{ set-slot-imm## f 3 2 }
|
|
|
|
|
T{ write-barrier-imm## f 1 }
|
2010-09-06 20:01:44 -04:00
|
|
|
}
|
2015-07-03 12:39:59 -04:00
|
|
|
} [
|
2010-09-06 20:01:44 -04:00
|
|
|
V{
|
2018-08-10 14:04:49 -04:00
|
|
|
T{ copy## f 2 1 }
|
|
|
|
|
T{ set-slot-imm## f 3 2 }
|
|
|
|
|
T{ write-barrier-imm## f 1 }
|
2010-09-06 20:01:44 -04:00
|
|
|
} write-barriers-step
|
|
|
|
|
] unit-test
|
|
|
|
|
|
2015-07-03 12:39:59 -04:00
|
|
|
{
|
2010-09-06 20:01:44 -04:00
|
|
|
V{
|
2018-08-10 14:04:49 -04:00
|
|
|
T{ copy## f 2 1 }
|
|
|
|
|
T{ copy## f 3 2 }
|
|
|
|
|
T{ set-slot-imm## f 3 1 }
|
|
|
|
|
T{ write-barrier-imm## f 2 }
|
2010-09-06 20:01:44 -04:00
|
|
|
}
|
2015-07-03 12:39:59 -04:00
|
|
|
} [
|
2010-09-06 20:01:44 -04:00
|
|
|
V{
|
2018-08-10 14:04:49 -04:00
|
|
|
T{ copy## f 2 1 }
|
|
|
|
|
T{ copy## f 3 2 }
|
|
|
|
|
T{ set-slot-imm## f 3 1 }
|
|
|
|
|
T{ write-barrier-imm## f 2 }
|
2010-09-06 20:01:44 -04:00
|
|
|
} write-barriers-step
|
|
|
|
|
] unit-test
|
|
|
|
|
|
2015-07-03 12:39:59 -04:00
|
|
|
{
|
2010-09-06 20:01:44 -04:00
|
|
|
V{
|
2018-08-10 14:04:49 -04:00
|
|
|
T{ copy## f 2 1 }
|
|
|
|
|
T{ copy## f 3 2 }
|
|
|
|
|
T{ set-slot-imm## f 4 1 }
|
|
|
|
|
T{ write-barrier-imm## f 3 }
|
2010-09-06 20:01:44 -04:00
|
|
|
}
|
2015-07-03 12:39:59 -04:00
|
|
|
} [
|
2010-09-06 20:01:44 -04:00
|
|
|
V{
|
2018-08-10 14:04:49 -04:00
|
|
|
T{ copy## f 2 1 }
|
|
|
|
|
T{ copy## f 3 2 }
|
|
|
|
|
T{ set-slot-imm## f 4 1 }
|
|
|
|
|
T{ write-barrier-imm## f 3 }
|
2010-09-06 20:01:44 -04:00
|
|
|
} write-barriers-step
|
|
|
|
|
] unit-test
|