Esempio n. 1
0
File: rt.c Progetto: DeforaOS/libc
/* main */
int main(int argc, char * argv[])
{
	int ret = 0;
	(void) argc;

	ret |= _rt(argv[0]);
	return (ret == 0) ? 0 : 2;
}
Esempio n. 2
0
void armv7a::arm_strex(armv7a_ir& inst)
{
    inst.print_inst("arm_strex");
    inst.check(27, 20, B(0001 1000));
    inst.check(11, 4, B(1111 1001));

    if(rf.condition_passed(inst.cond()))
    {
        uint32_t rn = inst(19, 16);
        uint32_t rd = inst(15, 12);
        uint32_t rt = inst(3, 0);
        uint32_t d = rd;
        uint32_t t = rt;
        uint32_t n = rn;
        uint32_t imm32 = 0;

        if((d == 15) || (t == 15) || (n == 15))
        {
            printb(d_inst, "arm_strex error");
        }

        if((d == n) || (d == t))
        {
            printb(d_inst, "arm_strex error 2");
        }

        //ESO
        null_check_if_thumbee(n);
        uint32_t address = rf.r_read(n) + imm32;

        if(exclusive_monitor_pass(address, 4))
        {
            bits _rt(rf.r_read(t), 32);

            if(! mem_a_write(address, 4, _rt))
            {
                return;
            }

            rf.r_write(d, 0);
        }

        else
        {
            rf.r_write(d, 1);
        }
    }
}
Esempio n. 3
0
File: Lock.cpp Progetto: ngot/fibjs
result_t Lock::acquire(bool blocking, bool &retVal)
{
    if (!blocking)
    {
        retVal = m_lock.trylock();
        return 0;
    }

    if (!m_lock.trylock())
    {
        Isolate::rt _rt(holder());
        m_lock.lock();
    }

    retVal = true;

    return 0;
}