xref: /llvm-project/libc/src/unistd/swab.cpp (revision 5ff3ff33ff930e4ec49da7910612d8a41eb068cb)
195ca2e2cSCaslyn Tonelli //===-- Implementation of swab --------------------------------------------===//
295ca2e2cSCaslyn Tonelli //
395ca2e2cSCaslyn Tonelli // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
495ca2e2cSCaslyn Tonelli // See https://llvm.org/LICENSE.txt for license information.
595ca2e2cSCaslyn Tonelli // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
695ca2e2cSCaslyn Tonelli //
795ca2e2cSCaslyn Tonelli //===----------------------------------------------------------------------===//
895ca2e2cSCaslyn Tonelli 
995ca2e2cSCaslyn Tonelli #include "src/unistd/swab.h"
1095ca2e2cSCaslyn Tonelli 
1195ca2e2cSCaslyn Tonelli #include "src/__support/common.h"
12*5ff3ff33SPetr Hosek #include "src/__support/macros/config.h"
1395ca2e2cSCaslyn Tonelli 
14*5ff3ff33SPetr Hosek namespace LIBC_NAMESPACE_DECL {
1595ca2e2cSCaslyn Tonelli 
1695ca2e2cSCaslyn Tonelli LLVM_LIBC_FUNCTION(void, swab,
1795ca2e2cSCaslyn Tonelli                    (const void *__restrict from, void *__restrict to,
1895ca2e2cSCaslyn Tonelli                     ssize_t n)) {
1995ca2e2cSCaslyn Tonelli   const unsigned char *f = static_cast<const unsigned char *>(from);
2095ca2e2cSCaslyn Tonelli   unsigned char *t = static_cast<unsigned char *>(to);
2195ca2e2cSCaslyn Tonelli   for (ssize_t i = 1; i < n; i += 2) {
2295ca2e2cSCaslyn Tonelli     t[i - 1] = f[i];
2395ca2e2cSCaslyn Tonelli     t[i] = f[i - 1];
2495ca2e2cSCaslyn Tonelli   }
2595ca2e2cSCaslyn Tonelli }
2695ca2e2cSCaslyn Tonelli 
27*5ff3ff33SPetr Hosek } // namespace LIBC_NAMESPACE_DECL
28