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

📄 ngx_gcc_atomic_sparc64.h

📁 nginx 反向代理0.7.1版本 用于实现反向代理
💻 H
字号:
/* * Copyright (C) Igor Sysoev *//* * "casa   [r1] 0x80, r2, r0"  and * "casxa  [r1] 0x80, r2, r0"  do the following: * *     if ([r1] == r2) { *         swap(r0, [r1]); *     } else { *         r0 = [r1]; *     } * * so "r0 == r2" means that the operation was successfull. * * * The "r" means the general register. * The "+r" means the general register used for both input and output. */#if (NGX_PTR_SIZE == 4)#define NGX_CASA  "casa"#else#define NGX_CASA  "casxa"#endifstatic ngx_inline ngx_atomic_uint_tngx_atomic_cmp_set(ngx_atomic_t *lock, ngx_atomic_uint_t old,    ngx_atomic_uint_t set){    __asm__ volatile (    NGX_CASA " [%1] 0x80, %2, %0"    : "+r" (set) : "r" (lock), "r" (old) : "memory");    return (set == old);}static ngx_inline ngx_atomic_int_tngx_atomic_fetch_add(ngx_atomic_t *value, ngx_atomic_int_t add){    ngx_atomic_uint_t  old, res;    old = *value;    for ( ;; ) {        res = old + add;        __asm__ volatile (        NGX_CASA " [%1] 0x80, %2, %0"        : "+r" (res) : "r" (value), "r" (old) : "memory");        if (res == old) {            return res;        }        old = res;    }}#if (NGX_SMP)#define ngx_memory_barrier()                                                  \            __asm__ volatile (                                                \            "membar #LoadLoad | #LoadStore | #StoreStore | #StoreLoad"        \            ::: "memory")#else#define ngx_memory_barrier()   __asm__ volatile ("" ::: "memory")#endif#define ngx_cpu_pause()

⌨️ 快捷键说明

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