⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atomic.s

📁 newos is new operation system
💻 S
字号:
/*** Copyright 2001, Travis Geiselbrecht. All rights reserved.** Distributed under the terms of the NewOS License.*/#define FUNCTION(x) .global x; .type x,@function; x.text/* int atomic_add(int *val, int incr) */FUNCTION(atomic_add):	movl	4(%esp),%edx	movl	8(%esp),%eax	lock	xaddl	%eax,(%edx)	ret/* int atomic_and(int *val, int incr) */FUNCTION(atomic_and):	movl	4(%esp),%edx_atomic_and1:	movl	8(%esp),%ecx	movl	(%edx),%eax	andl	%eax,%ecx	lock	cmpxchgl	%ecx,(%edx)	jnz		_atomic_and1	ret/* int atomic_or(int *val, int incr) */FUNCTION(atomic_or):	movl	4(%esp),%edx_atomic_or1:	movl	8(%esp),%ecx	movl	(%edx),%eax	orl		%eax,%ecx	lock	cmpxchgl	%ecx,(%edx)	jnz		_atomic_or1	ret/* int atomic_set(int *val, int set_to) */FUNCTION(atomic_set):	movl	4(%esp),%edx	movl	8(%esp),%eax	xchg	%eax,(%edx)	ret/* int test_and_set(int *val, int set_to, int test_val) */FUNCTION(test_and_set):	movl	4(%esp),%edx	movl	8(%esp),%ecx	movl	12(%esp),%eax	lock	cmpxchgl	%ecx,(%edx)	ret/* saves the conversion factor needed for system_time */cv_factor:	.word 0FUNCTION(setup_system_time):	movl	4(%esp),%eax	movl	%eax,cv_factor	ret/* long long system_time(); */FUNCTION(system_time):	/* load 64-bit factor into %eax (low), %edx (high) */	rdtsc		/* time in %edx,%eax */	pushl	%ebx	pushl	%ecx	movl	cv_factor, %ebx	movl	%edx, %ecx	/* save high half */	mull	%ebx 		/* truncate %eax, but keep %edx */	movl	%ecx, %eax	movl	%edx, %ecx	/* save high half of low */	mull	%ebx /*, %eax*/	/* now compute  [%edx, %eax] + [%ecx], propagating carry */	subl	%ebx, %ebx	/* need zero to propagate carry */	addl	%ecx, %eax	adc		%ebx, %edx	popl	%ecx	popl	%ebx	ret/* void i386_switch_stack_and_call(addr_t stack, void (*func)(void *), void *arg); */FUNCTION(i386_switch_stack_and_call):	movl	4(%esp),%eax	// new stack	movl	8(%esp),%ecx	// func	movl	12(%esp),%edx	// args	movl	%eax,%esp		// switch the stack	pushl	%edx			// push the argument	call	*%ecx			// call the target function_loop:	jmp		_loop

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -