diff --git a/config/linux/aarch64/entrypoints.txt b/config/linux/aarch64/entrypoints.txt
index 34d07c2..e654d59 100644
--- a/config/linux/aarch64/entrypoints.txt
+++ b/config/linux/aarch64/entrypoints.txt
@@ -64,6 +64,7 @@
     libc.src.math.frexp
     libc.src.math.frexpf
     libc.src.math.frexpl
+    libc.src.math.hypotf
     libc.src.math.logb
     libc.src.math.logbf
     libc.src.math.logbl
diff --git a/config/linux/api.td b/config/linux/api.td
index 33ae64c..40eec8f 100644
--- a/config/linux/api.td
+++ b/config/linux/api.td
@@ -191,6 +191,7 @@
    "frexp",
    "frexpf",
    "frexpl",
+   "hypotf",
    "logb",
    "logbf",
    "logbl",
diff --git a/config/linux/x86_64/entrypoints.txt b/config/linux/x86_64/entrypoints.txt
index 6aca5e4..a67e408 100644
--- a/config/linux/x86_64/entrypoints.txt
+++ b/config/linux/x86_64/entrypoints.txt
@@ -97,6 +97,7 @@
     libc.src.math.frexp
     libc.src.math.frexpf
     libc.src.math.frexpl
+    libc.src.math.hypotf
     libc.src.math.logb
     libc.src.math.logbf
     libc.src.math.logbl
diff --git a/spec/stdc.td b/spec/stdc.td
index 77fa971..61b3dcb 100644
--- a/spec/stdc.td
+++ b/spec/stdc.td
@@ -296,6 +296,8 @@
           FunctionSpec<"frexpf", RetValSpec<FloatType>, [ArgSpec<FloatType>, ArgSpec<IntPtr>]>,
           FunctionSpec<"frexpl", RetValSpec<LongDoubleType>, [ArgSpec<LongDoubleType>, ArgSpec<IntPtr>]>,
 
+          FunctionSpec<"hypotf", RetValSpec<FloatType>, [ArgSpec<FloatType>, ArgSpec<FloatType>]>,
+
           FunctionSpec<"logb", RetValSpec<DoubleType>, [ArgSpec<DoubleType>]>,
           FunctionSpec<"logbf", RetValSpec<FloatType>, [ArgSpec<FloatType>]>,
           FunctionSpec<"logbl", RetValSpec<LongDoubleType>, [ArgSpec<LongDoubleType>]>,
diff --git a/src/math/CMakeLists.txt b/src/math/CMakeLists.txt
index 3b4f821..633a1cd 100644
--- a/src/math/CMakeLists.txt
+++ b/src/math/CMakeLists.txt
@@ -593,3 +593,15 @@
   COMPILE_OPTIONS
     -O2
 )
+
+add_entrypoint_object(
+  hypotf
+  SRCS
+    hypotf.cpp
+  HDRS
+    hypotf.h
+  DEPENDS
+    libc.utils.FPUtil.fputil
+  COMPILE_OPTIONS
+    -O2
+)
diff --git a/src/math/hypotf.cpp b/src/math/hypotf.cpp
new file mode 100644
index 0000000..10ebbb1
--- /dev/null
+++ b/src/math/hypotf.cpp
@@ -0,0 +1,222 @@
+//===-- Implementation of hypotf function ---------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#include "src/__support/common.h"
+#include "utils/FPUtil/BasicOperations.h"
+#include "utils/FPUtil/FPBits.h"
+
+namespace __llvm_libc {
+
+using namespace fputil;
+
+uint32_t findLeadingOne(uint32_t mant, int &shift_length) {
+  shift_length = 0;
+  constexpr int nsteps = 5;
+  constexpr uint32_t bounds[nsteps] = {1 << 16, 1 << 8, 1 << 4, 1 << 2, 1 << 1};
+  constexpr int shifts[nsteps] = {16, 8, 4, 2, 1};
+  for (int i = 0; i < nsteps; ++i) {
+    if (mant >= bounds[i]) {
+      shift_length += shifts[i];
+      mant >>= shifts[i];
+    }
+  }
+  return 1U << shift_length;
+}
+
+// Correctly rounded IEEE 754 HYPOT(x, y) with round to nearest, ties to even.
+//
+// Algorithm:
+//   -  Let a = max(|x|, |y|), b = min(|x|, |y|), then we have that:
+//          a <= sqrt(a^2 + b^2) <= min(a + b, a*sqrt(2))
+//   1. So if b < eps(a)/2, then HYPOT(x, y) = a.
+//
+//   -  Moreover, the exponent part of HYPOT(x, y) is either the same or 1 more
+//      than the exponent part of a.
+//
+//   2. For the remaining cases, we will use the digit-by-digit (shift-and-add)
+//      algorithm to compute SQRT(Z):
+//
+//   -  For Y = y0.y1...yn... = SQRT(Z),
+//      let Y(n) = y0.y1...yn be the first n fractional digits of Y.
+//
+//   -  The nth scaled residual R(n) is defined to be:
+//          R(n) = 2^n * (Z - Y(n)^2)
+//
+//   -  Since Y(n) = Y(n - 1) + yn * 2^(-n), the scaled residual
+//      satisfies the following recurrence formula:
+//          R(n) = 2*R(n - 1) - yn*(2*Y(n - 1) + 2^(-n)),
+//      with the initial conditions:
+//          Y(0) = y0, and R(0) = Z - y0.
+//
+//   -  So the nth fractional digit of Y = SQRT(Z) can be decided by:
+//          yn = 1  if 2*R(n - 1) >= 2*Y(n - 1) + 2^(-n),
+//               0  otherwise.
+//
+//   3. Precision analysis:
+//
+//   -  Notice that in the decision function:
+//          2*R(n - 1) >= 2*Y(n - 1) + 2^(-n),
+//      the right hand side only uses up to the 2^(-n)-bit, and both sides are
+//      non-negative, so R(n - 1) can be truncated at the 2^(-(n + 1))-bit, so
+//      that 2*R(n - 1) is corrected up to the 2^(-n)-bit.
+//
+//   -  Thus, in order to round SQRT(a^2 + b^2) correctly up to n-fractional
+//      bits, we need to perform the summation (a^2 + b^2) correctly up to (2n +
+//      2)-fractional bits, and the remaining bits are sticky bits (i.e. we only
+//      care if they are 0 or > 0), and the comparisons, additions/subtractions
+//      can be done in n-fractional bits precision.
+//
+//   -  For single precision (float), we can use uint64_t to store the sum a^2 +
+//      b^2 exact up to (2n + 2)-fractional bits.
+//
+//   -  Then we can feed this sum into the digit-by-digit algorithm for SQRT(Z)
+//      described above.
+//
+//
+// Special cases:
+//   - HYPOT(x, y) is +Inf if x or y is +Inf or -Inf; else
+//   - HYPOT(x, y) is NaN if x or y is NaN.
+//
+float LLVM_LIBC_ENTRYPOINT(hypotf)(float x, float y) {
+  FPBits<float> x_bits(x), y_bits(y);
+
+  if (x_bits.isInf() || y_bits.isInf()) {
+    return FPBits<float>::inf();
+  }
+  if (x_bits.isNaN()) {
+    return x;
+  }
+  if (y_bits.isNaN()) {
+    return y;
+  }
+
+  uint16_t a_exp, b_exp, out_exp;
+  uint32_t a_mant, b_mant;
+  uint64_t a_mant_sq, b_mant_sq;
+  bool sticky_bits;
+
+  if ((x_bits.exponent >= y_bits.exponent + MantissaWidth<float>::value + 2) ||
+      (y == 0)) {
+    return abs(x);
+  } else if ((y_bits.exponent >=
+              x_bits.exponent + MantissaWidth<float>::value + 2) ||
+             (x == 0)) {
+    y_bits.sign = 0;
+    return abs(y);
+  }
+
+  if (x >= y) {
+    a_exp = x_bits.exponent;
+    a_mant = x_bits.mantissa;
+    b_exp = y_bits.exponent;
+    b_mant = y_bits.mantissa;
+  } else {
+    a_exp = y_bits.exponent;
+    a_mant = y_bits.mantissa;
+    b_exp = x_bits.exponent;
+    b_mant = x_bits.mantissa;
+  }
+
+  out_exp = a_exp;
+
+  // Add an extra bit to simplify the final rounding bit computation.
+  constexpr uint32_t one = 1U << (MantissaWidth<float>::value + 1);
+
+  a_mant <<= 1;
+  b_mant <<= 1;
+
+  uint32_t leading_one;
+  int y_mant_width;
+  if (a_exp != 0) {
+    leading_one = one;
+    a_mant |= one;
+    y_mant_width = MantissaWidth<float>::value + 1;
+  } else {
+    leading_one = findLeadingOne(a_mant, y_mant_width);
+  }
+
+  if (b_exp != 0) {
+    b_mant |= one;
+  }
+
+  a_mant_sq = static_cast<uint64_t>(a_mant) * a_mant;
+  b_mant_sq = static_cast<uint64_t>(b_mant) * b_mant;
+
+  // At this point, a_exp >= b_exp > a_exp - 25, so in order to line up aSqMant
+  // and bSqMant, we need to shift bSqMant to the right by (a_exp - b_exp) bits.
+  // But before that, remember to store the losing bits to sticky.
+  // The shift length is for a^2 and b^2, so it's double of the exponent
+  // difference between a and b.
+  uint16_t shift_length = 2 * (a_exp - b_exp);
+  sticky_bits = ((b_mant_sq & ((1ULL << shift_length) - 1)) != 0);
+  b_mant_sq >>= shift_length;
+
+  uint64_t sum = a_mant_sq + b_mant_sq;
+  if (sum >= (1ULL << (2 * y_mant_width + 2))) {
+    // a^2 + b^2 >= 4* leading_one^2, so we will need an extra bit to the left.
+    if (leading_one == one) {
+      // For normal result, we discard the last 2 bits of the sum and increase
+      // the exponent.
+      sticky_bits = sticky_bits || ((sum & 0x3U) != 0);
+      sum >>= 2;
+      ++out_exp;
+      if (out_exp >= FPBits<float>::maxExponent) {
+        return FPBits<float>::inf();
+      }
+    } else {
+      // For denormal result, we simply move the leading bit of the result to
+      // the left by 1.
+      leading_one <<= 1;
+      ++y_mant_width;
+    }
+  }
+
+  uint32_t Y = leading_one;
+  uint32_t R = static_cast<uint32_t>(sum >> y_mant_width) - leading_one;
+  uint32_t tailBits = static_cast<uint32_t>(sum) & (leading_one - 1);
+
+  for (uint32_t current_bit = leading_one >> 1; current_bit;
+       current_bit >>= 1) {
+    R = (R << 1) + ((tailBits & current_bit) ? 1 : 0);
+    uint32_t tmp = (Y << 1) + current_bit; // 2*y(n - 1) + 2^(-n)
+    if (R >= tmp) {
+      R -= tmp;
+      Y += current_bit;
+    }
+  }
+
+  bool round_bit = Y & 1U;
+  bool lsb = Y & 2U;
+
+  if (Y >= one) {
+    Y -= one;
+
+    if (out_exp == 0) {
+      out_exp = 1;
+    }
+  }
+
+  Y >>= 1;
+
+  // Round to the nearest, tie to even.
+  if (round_bit && (lsb || sticky_bits || (R != 0))) {
+    ++Y;
+  }
+
+  if (Y >= (one >> 1)) {
+    Y -= one >> 1;
+    ++out_exp;
+    if (out_exp >= FPBits<float>::maxExponent) {
+      return FPBits<float>::inf();
+    }
+  }
+
+  Y |= static_cast<uint32_t>(out_exp) << MantissaWidth<float>::value;
+  return *reinterpret_cast<float *>(&Y);
+}
+
+} // namespace __llvm_libc
diff --git a/src/math/hypotf.h b/src/math/hypotf.h
new file mode 100644
index 0000000..084fd7f
--- /dev/null
+++ b/src/math/hypotf.h
@@ -0,0 +1,18 @@
+//===-- Implementation header for hypotf ------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SRC_MATH_HYPOTF_H
+#define LLVM_LIBC_SRC_MATH_HYPOTF_H
+
+namespace __llvm_libc {
+
+float hypotf(float x, float y);
+
+} // namespace __llvm_libc
+
+#endif // LLVM_LIBC_SRC_MATH_HYPOTF_H
diff --git a/test/src/math/CMakeLists.txt b/test/src/math/CMakeLists.txt
index e1bac1a..a907369 100644
--- a/test/src/math/CMakeLists.txt
+++ b/test/src/math/CMakeLists.txt
@@ -591,3 +591,16 @@
     libc.src.math.remquol
     libc.utils.FPUtil.fputil
 )
+
+add_fp_unittest(
+  hypotf_test
+  NEED_MPFR
+  SUITE
+    libc_math_unittests
+  SRCS
+    hypotf_test.cpp
+  DEPENDS
+    libc.include.math
+    libc.src.math.hypotf
+    libc.utils.FPUtil.fputil
+)
diff --git a/test/src/math/hypotf_test.cpp b/test/src/math/hypotf_test.cpp
new file mode 100644
index 0000000..7b1ffd5
--- /dev/null
+++ b/test/src/math/hypotf_test.cpp
@@ -0,0 +1,65 @@
+//===-- Unittests for hypotf ----------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "include/math.h"
+#include "src/math/hypotf.h"
+#include "utils/FPUtil/FPBits.h"
+#include "utils/FPUtil/TestHelpers.h"
+#include "utils/MPFRWrapper/MPFRUtils.h"
+#include "utils/UnitTest/Test.h"
+
+using FPBits = __llvm_libc::fputil::FPBits<float>;
+using UIntType = FPBits::UIntType;
+
+namespace mpfr = __llvm_libc::testing::mpfr;
+
+static const float zero = FPBits::zero();
+static const float negZero = FPBits::negZero();
+static const float nan = FPBits::buildNaN(1);
+static const float inf = FPBits::inf();
+static const float negInf = FPBits::negInf();
+
+TEST(HypotfTest, SpecialNumbers) {
+  EXPECT_FP_EQ(__llvm_libc::hypotf(inf, nan), inf);
+  EXPECT_FP_EQ(__llvm_libc::hypotf(nan, negInf), inf);
+  EXPECT_FP_EQ(__llvm_libc::hypotf(zero, inf), inf);
+  EXPECT_FP_EQ(__llvm_libc::hypotf(negInf, negZero), inf);
+
+  EXPECT_FP_EQ(__llvm_libc::hypotf(nan, nan), nan);
+  EXPECT_FP_EQ(__llvm_libc::hypotf(nan, zero), nan);
+  EXPECT_FP_EQ(__llvm_libc::hypotf(negZero, nan), nan);
+
+  EXPECT_FP_EQ(__llvm_libc::hypotf(negZero, zero), zero);
+}
+
+TEST(HypotfTest, SubnormalRange) {
+  constexpr UIntType count = 1000001;
+  constexpr UIntType step =
+      (FPBits::maxSubnormal - FPBits::minSubnormal) / count;
+  for (UIntType v = FPBits::minSubnormal, w = FPBits::maxSubnormal;
+       v <= FPBits::maxSubnormal && w >= FPBits::minSubnormal;
+       v += step, w -= step) {
+    float x = FPBits(v), y = FPBits(w);
+    float result = __llvm_libc::hypotf(x, y);
+    mpfr::BinaryInput<float> input{x, y};
+    ASSERT_MPFR_MATCH(mpfr::Operation::Hypot, input, result, 0.5);
+  }
+}
+
+TEST(HypotfTest, NormalRange) {
+  constexpr UIntType count = 1000001;
+  constexpr UIntType step = (FPBits::maxNormal - FPBits::minNormal) / count;
+  for (UIntType v = FPBits::minNormal, w = FPBits::maxNormal;
+       v <= FPBits::maxNormal && w >= FPBits::minNormal; v += step, w -= step) {
+    float x = FPBits(v), y = FPBits(w);
+    float result = __llvm_libc::hypotf(x, y);
+    ;
+    mpfr::BinaryInput<float> input{x, y};
+    ASSERT_MPFR_MATCH(mpfr::Operation::Hypot, input, result, 0.5);
+  }
+}
