Home | History | Annotate | Download | only in memcheck

Lines Matching defs:cas

4236 static void do_shadow_CAS_single ( MCEnv* mce, IRCAS* cas );
4237 static void do_shadow_CAS_double ( MCEnv* mce, IRCAS* cas );
4291 void do_shadow_CAS ( MCEnv* mce, IRCAS* cas )
4304 5. the CAS itself
4370 The "atomically" is the CAS bit. The scheme is always the same:
4395 read that; but then in the gap between the read and the CAS, a
4397 the location. Then the CAS in this thread will fail and we will
4416 if (cas->oldHi == IRTemp_INVALID) {
4417 do_shadow_CAS_single( mce, cas );
4419 do_shadow_CAS_double( mce, cas );
4424 cas )
4435 /* single CAS */
4436 tl_assert(cas->oldHi == IRTemp_INVALID);
4437 tl_assert(cas->expdHi == NULL);
4438 tl_assert(cas->dataHi == NULL);
4440 elemTy = typeOfIRExpr(mce->sb->tyenv, cas->expdLo);
4450 tl_assert(isOriginalAtom(mce, cas->dataLo));
4452 = assignNew('V', mce, elemTy, expr2vbits(mce, cas->dataLo));
4456 = assignNew('B', mce, Ity_I32, schemeE(mce, cas->dataLo));
4461 tl_assert(isOriginalAtom(mce, cas->expdLo));
4463 = assignNew('V', mce, elemTy, expr2vbits(mce, cas->expdLo));
4467 = assignNew('B', mce, Ity_I32, schemeE(mce, cas->expdLo));
4479 cas->end, elemTy, cas->addr, 0/*Addr bias*/
4481 bind_shadow_tmp_to_orig('V', mce, mkexpr(cas->oldLo), voldLo);
4485 gen_load_b(mce, elemSzB, cas->addr, 0/*addr bias*/));
4486 bind_shadow_tmp_to_orig('B', mce, mkexpr(cas->oldLo), boldLo);
4489 /* 5. the CAS itself */
4490 stmt( 'C', mce, IRStmt_CAS(cas) );
4498 binop(opCasCmpEQ, cas->expdLo, mkexpr(cas->oldLo)));
4502 do_shadow_Store( mce, cas->end, cas->addr, 0/*bias*/,
4506 gen_store_b( mce, elemSzB, cas->addr, 0/*offset*/,
4513 static void do_shadow_CAS_double ( MCEnv* mce, IRCAS* cas )
4528 /* double CAS */
4529 tl_assert(cas->oldHi != IRTemp_INVALID);
4530 tl_assert(cas->expdHi != NULL);
4531 tl_assert(cas->dataHi != NULL);
4533 elemTy = typeOfIRExpr(mce->sb->tyenv, cas->expdLo);
4556 tl_assert(isOriginalAtom(mce, cas->dataHi));
4557 tl_assert(isOriginalAtom(mce, cas->dataLo));
4559 = assignNew('V', mce, elemTy, expr2vbits(mce, cas->dataHi));
4561 = assignNew('V', mce, elemTy, expr2vbits(mce, cas->dataLo));
4566 = assignNew('B', mce, Ity_I32, schemeE(mce, cas->dataHi));
4568 = assignNew('B', mce, Ity_I32, schemeE(mce, cas->dataLo));
4574 tl_assert(isOriginalAtom(mce, cas->expdHi));
4575 tl_assert(isOriginalAtom(mce, cas->expdLo));
4577 = assignNew('V', mce, elemTy, expr2vbits(mce, cas->expdHi));
4579 = assignNew('V', mce, elemTy, expr2vbits(mce, cas->expdLo));
4584 = assignNew('B', mce, Ity_I32, schemeE(mce, cas->expdHi));
4586 = assignNew('B', mce, Ity_I32, schemeE(mce, cas->expdLo));
4594 if (cas->end == Iend_LE) {
4598 tl_assert(cas->end == Iend_BE);
4607 cas->end, elemTy, cas->addr, memOffsHi/*Addr bias*/
4614 cas->end, elemTy, cas->addr, memOffsLo/*Addr bias*/
4616 bind_shadow_tmp_to_orig('V', mce, mkexpr(cas->oldHi), voldHi);
4617 bind_shadow_tmp_to_orig('V', mce, mkexpr(cas->oldLo), voldLo);
4621 gen_load_b(mce, elemSzB, cas->addr,
4625 gen_load_b(mce, elemSzB, cas->addr,
4627 bind_shadow_tmp_to_orig('B', mce, mkexpr(cas->oldHi), boldHi);
4628 bind_shadow_tmp_to_orig('B', mce, mkexpr(cas->oldLo), boldLo);
4631 /* 5. the CAS itself */
4632 stmt( 'C', mce, IRStmt_CAS(cas) );
4645 binop(opXor, cas->expdHi, mkexpr(cas->oldHi)));
4647 binop(opXor, cas->expdLo, mkexpr(cas->oldLo)));
4656 do_shadow_Store( mce, cas->end, cas->addr, memOffsHi/*bias*/,
4659 do_shadow_Store( mce, cas->end, cas->addr, memOffsLo/*bias*/,
4663 gen_store_b( mce, elemSzB, cas->addr, memOffsHi/*offset*/,
4666 gen_store_b( mce, elemSzB, cas->addr, memOffsLo/*offset*/,
4779 IRCAS* cas;
4847 cas = st->Ist.CAS.details;
4848 return isBogusAtom(cas->addr)
4849 || (cas->expdHi ? isBogusAtom(cas->expdHi) : False)
4850 || isBogusAtom(cas->expdLo)
4851 || (cas->dataHi ? isBogusAtom(cas->dataHi) : False)
4852 || isBogusAtom(cas->dataLo);
5085 do_shadow_CAS( &mce, st->Ist.CAS.details );
5086 /* Note, do_shadow_CAS copies the CAS itself to the output