diff --git a/emsdk.py b/emsdk.py
index 0063bcb..ac3307d 100644
--- a/emsdk.py
+++ b/emsdk.py
@@ -2199,14 +2199,22 @@
 
 # Get a list of tags for emscripten-releases.
 def load_releases_tags():
+  tags = []
+  tags_fastcomp = []
   info = load_releases_info()
-  tags = list(info['releases'].values())
+  for version, sha in sorted(info['releases'].items(), key=lambda x: version_key(x[0])):
+    tags.append(sha)
+    # Only include versions older than 1.39.0 in fastcomp releases
+    if version_key(version) < (2, 0, 0):
+      tags_fastcomp.append(sha)
+
   # Add the tip-of-tree, if it exists.
   if os.path.exists(tot_path()):
     tot = find_tot()
     if tot:
       tags.append(tot)
-  return tags
+
+  return tags, tags_fastcomp
 
 
 def load_releases_versions():
@@ -2234,7 +2242,7 @@
   llvm_precompiled_tags_64bit = load_file_index_list('llvm-tags-64bit.txt')
   llvm_precompiled_tags = llvm_precompiled_tags_32bit + llvm_precompiled_tags_64bit
   binaryen_tags = load_legacy_binaryen_tags()
-  releases_tags = load_releases_tags()
+  releases_tags, releases_tags_fastcomp = load_releases_tags()
 
   def dependencies_exist(sdk):
     for tool_name in sdk.uses:
@@ -2317,6 +2325,8 @@
         expand_category_param('%precompiled_tag64%', llvm_precompiled_tags_64bit, t, is_sdk=False)
       elif '%binaryen_tag%' in t.version:
         expand_category_param('%binaryen_tag%', binaryen_tags, t, is_sdk=False)
+      elif '%releases-tag%' in t.version and 'fastcomp' in t.version:
+        expand_category_param('%releases-tag%', releases_tags_fastcomp, t, is_sdk=False)
       elif '%releases-tag%' in t.version:
         expand_category_param('%releases-tag%', releases_tags, t, is_sdk=False)
       else:
@@ -2337,6 +2347,8 @@
         expand_category_param('%precompiled_tag32%', llvm_precompiled_tags_32bit, sdk, is_sdk=True)
       elif '%precompiled_tag64%' in sdk.version:
         expand_category_param('%precompiled_tag64%', llvm_precompiled_tags_64bit, sdk, is_sdk=True)
+      elif '%releases-tag%' in sdk.version and 'fastcomp' in sdk.version:
+        expand_category_param('%releases-tag%', releases_tags_fastcomp, sdk, is_sdk=True)
       elif '%releases-tag%' in sdk.version:
         expand_category_param('%releases-tag%', releases_tags, sdk, is_sdk=True)
       else:
