linux源码阅读笔记--ashldi3.c

#include <linux/export.h>
  18
  19#include <linux/libgcc.h>
  20
  21long long notrace __ashldi3(long long u, word_type b)
  22{
  23        DWunion uu, w;
  24        word_type bm;
  25
  26        if (b == 0)
  27                return u;
  28
  29        uu.ll = u;
  30        bm = 32 - b;
  31
  32        if (bm <= 0) {
  33                w.s.low = 0;
  34                w.s.high = (unsigned int) uu.s.low << -bm;
  35        } else {
  36                const unsigned int carries = (unsigned int) uu.s.low >> bm;
  37
  38                w.s.low = (unsigned int) uu.s.low << b;
  39                w.s.high = ((unsigned int) uu.s.high << b) | carries;
  40        }
  41
  42        return w.ll;
  43}
  44EXPORT_SYMBOL(__ashldi3);

本文主要用于实现long long类型的数据的左移操作,对于32位机器来说,则是对64位数进行左移操作(然后分成2个32位数的移位,最后将结果整合)


ashrdi3.c类似,只是向右移动

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值